zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    c# DES加密解密
    命令行远程调用图形界面程序
    mpv0.29 vo=x11 resize窗口渲染存在不正常黑色显示
    记qt 焦点状态在多个子窗口的关系
    linux_虚拟机终端连接方法
    python_爬虫_微信公众号抓取
    python_爬虫_multiprocessing.dummy以及multiprocessing
    python_爬虫_腾讯新闻app 单页新闻数据分析爬取
    python_爬虫_Charles手机证书安装问题
    python_爬虫_Selenium_Error
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/6916532.html
Copyright © 2011-2022 走看看