【数学】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 }
View Code

 

posted @ 2017-06-04 15:48  shulin15  阅读(480)  评论(0编辑  收藏  举报