【数学】codeforces A. Success Rate
http://codeforces.com/contest/773/problem/A
【思路】
用 (x+a)/(y+b) = p/q 来表示其核心思想,其中a 为做对的题目,b为做的题目,则有x+a = k*p,y+b = k*q.且有0<=a<=b,两式合并可得k>=x/p,k>=(y-x)/(q-p), 则如要满足两个等式,k应取其中较大的值(注意:若取得的k为小数,我们需要的是最小整数解,加1),最后注意一下特殊情况 p = 0,p = q.
最后要注意long long,max(m,n)*q会爆long long。
【Accepted】
1 #include <iostream> 2 #include <stdio.h> 3 #include <cmath> 4 #include <vector> 5 #include <algorithm> 6 #include <set> 7 #include <map> 8 #include <queue> 9 #include <deque> 10 #include <stack> 11 #include <string> 12 #include <bitset> 13 #include <ctime> 14 #include<algorithm> 15 #include<cstring> 16 using namespace std; 17 typedef long long ll; 18 19 int main() 20 { 21 int T; 22 int x,y,p,q; 23 scanf("%d",&T); 24 while(T--) 25 { 26 scanf("%d%d%d%d",&x,&y,&p,&q); 27 if(p==q) 28 { 29 if(x==y) 30 { 31 printf("0\n"); 32 } 33 else 34 { 35 printf("-1\n"); 36 } 37 continue; 38 } 39 if(p==0) 40 { 41 if(x==0) 42 { 43 printf("0\n"); 44 } 45 else 46 { 47 printf("-1\n"); 48 } 49 continue; 50 } 51 int m=(y-x)/(q-p)+((y-x)%(q-p)?1:0); 52 int n=x/p+(x%p?1:0); 53 cout<<(ll)max(m,n)*(ll)q-(ll)y<<endl; 54 } 55 return 0; 56 }