1. 程式人生 > >【NOIP2018模擬賽2018.10.3】capacitor

【NOIP2018模擬賽2018.10.3】capacitor

題目分析:

對於一個當前值now,有兩種可能的去向:

  1. now + 1
  2. 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;
}