本文主要是介绍cf 807C 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?
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.
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.
4 3 10 1 2 7 14 3 8 20 70 2 7 5 6 1 1
4 10 0 -1
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.
又是个比赛的时候脑子短路的题,比赛后几分钟有了思路,但是遗憾没能在比赛结束之前写完
只要满足3个条件就可以了
1.a/(b+y)<=c/d
2.(a+y)/(b+y)>=c/d
3(b+y)%d==0
求满足条件的最小y就好了
ac代码:
#include <iostream>
#include <cstring>
#include <cstdio>
typedef long long ll;
using namespace std;
int main()
{int n;cin>>n;long long a,b,c,d;while(n--){scanf("%lld%lld%lld%lld",&a,&b,&c,&d);if(c==0){if(a!=0)cout<<-1<<endl;elsecout<<0<<endl;}else if(c==d){if(a==b)cout<<0<<endl;elsecout<<-1<<endl;}else{long long p,q;if((c*b-d*a)%(d-c)==0){p=(c*b-d*a)/(d-c);}else{p=(c*b-d*a)/(d-c)+1;}if((a*d-c*b)%c==0){q=(a*d-c*b)/c;}elseq=(a*d-c*b)/c+1;if(p<q)p=q;if((p+b)%d!=0)p=((p+b)/d+1)*d-b;cout<<p<<endl;}}return 0;
}
这篇关于cf 807C Success Rate的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!