Success Rate CodeForces

来源:互联网 发布:如何寻找淘宝客 编辑:程序博客网 时间:2024/06/14 11:01

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


即为 x+Successful Submission = p * n   且 y+Submission = q * n  。


我们二分查找的就是这个n


还有隐藏条件 a > = 0 && b > = 0 && a < = b 这些就是check条件。


二分答案 本身就满足单调性 所以不用证明


#include <iostream>using namespace std;typedef long long ll;int main(){    int cases;    cin >> cases;    while(cases--)    {        int x,y,p,q;        cin >> x >> y >> p >> q;        ll l=0,r=1e9;        ll ans=-1;        while(l<=r)        {// (x+a)/(y+b)=p/q// x+a =p*n// y+b =q*n            ll mid=(l+r)/2;            ll a=p*mid-x;            ll b=q*mid-y;            if(a>=0 && b>=0 && a<=b) // check条件            {                ans=mid;                r=mid-1;            }            else            {                l=mid+1;            }        }        if(ans==-1) cout << ans << endl;        else cout << ans*q-y << endl; // 不能直接输出 ans 这个是 n    }}

其实 我想了一下 应该可以用ex_gcd()做 但是 条件略多 


这道题如果用ex_gcd()做的话 可能会爆ll 所以不能



其实可以直接用不等式做出来

0 0