CF-807C
题意:
我们可以将x+1,y+1或只y+1,使得x/y==p/q,问y最少要加几次,
若不能,输出-1.
由题意可得:
(x+a)/(y+b)=p/q
x+a=k*p , y+b=k*q
a=k*p-x , b=k*q-y
二分查找k,找到满足条件的最小值。
附AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 const int INF=1000000000; 5 long long int x,y,p,q; 6 7 int main(){ 8 int t; 9 cin>>t; 10 while(t--){ 11 cin>>x>>y>>p>>q; 12 long long int r=INF; 13 long long int l=0; 14 long long int temp=-1; 15 while(l<=r){ 16 long long int mid=(l+r)/2; 17 long long int a=mid*p-x; 18 long long int b=mid*q-y; 19 if(a>=0&&b>=0&&a<=b){ 20 temp=b; 21 r=mid-1; 22 } 23 else{ 24 l=mid+1; 25 } 26 } 27 if(temp==-1) 28 cout<<"-1"<<endl; 29 else 30 cout<<temp<<endl; 31 } 32 return 0; 33 }