【NOIP2018模拟赛2018.10.3】capacitor

【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;
}