【NOIP2018模擬賽2018.10.3】capacitor
阿新 • • 發佈:2018-12-13
題目分析:
對於一個當前值now,有兩種可能的去向:
- now + 1
- now / (now+1)
以為第一種很簡單直接加一就行了就考慮第二種。 對於 n/m = n/(m-n) / n / (m-n) + 1
所以直接可以上下每次講大數模小數的值加起來就行了。
#include<bits/stdc++.h> using namespace std; int t; long long a,b; int main() { // freopen("capacitor.in","r",stdin); // freopen("capacitor.out","w",stdout); cin>>t; while(t--) { cin>>a>>b; if(a==b) cout<<1<<endl; else { long long now = 1; while(1) { if(a%b==0) { a=a/b; b=1; } else if(b%a==0) { b=b/a; a=1; } if(a==1) { now += (b-2)+1; break; } if(b==1) { now += (a-2)+1; break; } if(a>b) { now += a/b; a = a%b; } else if(a<b) { now += b/a; b = b%a; } if(a==b-1) { now += a; break; } } cout<<now<<endl; } } return 0; }