Success Rate CodeForces

来源:互联网 发布:淘宝上的消字灵管用吗 编辑:程序博客网 时间:2024/06/03 14:04

题目链接

题意:

这道题 要求求最小满足条件的提交次数 ,条件为(x+Successful Submission)/(y+Submission)= p / q 。

思路:

我们可以得到如下方程:

x+dx=k*p;

y+dy=k*q;

那么可以得到以下几个方程:

k*p-x>=0,k*q-y>=0,k*p-x<=k*q-y;

那么根据以上方程我们可以二分维护最小的k值.即可得到dy

#include<bits/stdc++.h>#define Ri(a) scanf("%d", &a)#define Rl(a) scanf("%lld", &a)#define Rf(a) scanf("%lf", &a)#define Rs(a) scanf("%s", a)#define Pi(a) printf("%d\n", (a))#define Pf(a) printf("%lf\n", (a))#define Pl(a) printf("%lld\n", (a))#define Ps(a) printf("%s\n", (a))#define W(a) while(a--)#define CLR(a, b) memset(a, (b), sizeof(a))#define MOD 1000000007#define inf 0x3f3f3f3f#define exp 0.00000001#define  pii  pair<int, int>#define  mp   make_pair#define  pb   push_backusing namespace std;typedef long long ll;const int maxn=1e5+10;ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}ll x,y,p,q,ans;int check(ll a){if(p*a-x<=q*a-y&&p*a-x>=0&&q*a-y>=0)return 1;return 0;}int main(){int t;Ri(t);W(t){Ri(x),Ri(y),Ri(p),Ri(q);if(p==q){if(x==y)Pi(0);elsePi(-1);}else if(p==0){if(x==0)Pi(0);elsePi(-1);}else{ans=-1;ll l=0,r=1e9,mid;while(l<=r){mid=(l+r)>>1;if(check(mid)){r=mid-1;}else{l=mid+1;}}Pl(l*q-y);}}return 0;}


0 0
原创粉丝点击