• Codeforces Round #412 C. Success Rate


    Success Rate

    You are an experienced Codeforces user. Today you found out that during your activity on Codeforces you have made y submissions, out of which x have been successful. Thus, your current success rate on Codeforces is equal to x / y.

    Your favorite rational number in the [0;1] range is p / q. Now you wonder: what is the smallest number of submissions you have to make if you want your success rate to be p / q?

    Input

    The first line contains a single integer t (1 ≤ t ≤ 1000) — the number of test cases.

    Each of the next t lines contains four integers x, y, p and q (0 ≤ x ≤ y ≤ 109; 0 ≤ p ≤ q ≤ 109; y > 0; q > 0).

    It is guaranteed that p / q is an irreducible fraction.

    Hacks. For hacks, an additional constraint of t ≤ 5 must be met.

    Output

    For each test case, output a single integer equal to the smallest number of submissions you have to make if you want your success rate to be equal to your favorite rational number, or -1 if this is impossible to achieve.

    Example
    Input
    4
    3 10 1 2
    7 14 3 8
    20 70 2 7
    5 6 1 1
    Output
    4
    10
    0
    -1
    Note

    In the first example, you have to make 4 successful submissions. Your success rate will be equal to 7 / 14, or 1 / 2.

    In the second example, you have to make 2 successful and 8 unsuccessful submissions. Your success rate will be equal to 9 / 24, or 3 / 8.

    In the third example, there is no need to make any new submissions. Your success rate is already equal to 20 / 70, or 2 / 7.

    In the fourth example, the only unsuccessful submission breaks your hopes of having the success rate equal to 1.

    由题可知,要满足(x+a)/(y+b) == np/nq  ,所以(x+a)=np , (y+b)=nq。由于0 <= a <= b,所以n>=x/p,x>=(y-x)/(q-p) 向上取整求满足条件的最小n值,

    就可得答案是b=nq-y;

    p==q 和p==0特判下

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 #define ll long long
     4 ll x, y, q, p;
     5 int main(){
     6     int t;
     7     cin >> t;
     8     while(t--){
     9         cin >> x >> y >> p >> q;
    10         if(q == p){
    11             printf("%d
    ",(x==y)?0:-1);
    12             continue;
    13         }
    14         if(p == 0){
    15             printf("%d
    ",(x==0)?0:-1);
    16             continue;
    17         }
    18         ll GCD = __gcd(q,p);
    19         q/=GCD; p/=GCD;
    20         ll n = max(ceil(x*1.0/p),ceil((y-x)*1.0/(q-p)));
    21         printf("%lld
    ",n*q-y);
    22     }
    23     return 0;
    24 }
  • 相关阅读:
    结对编程实验(1李晓冬13、张金伟118)
    软件工程网络15个人阅读2(201521123118张金伟)
    软件工程网络15个人作业阅读1(201521123118 张金伟)
    《Java课程设计》
    201521123118《java与程序设计》第14周学习总结
    201521123118《程序与设计》第13周学习总结
    201521123118《程序与设计》第12周学习总结
    网络15软工个人作业5——软件工程总结
    个人作业4——alpha阶段个人总结
    软工网络15个人作业3——案例分析
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/6916532.html
Copyright © 2020-2023  润新知