codeforce C. Success Rate

写完这道题目才发现自己对二分的理解太浅了 这题是典型的利用二分“假定一个问题可行并求最优解”

二分是通过不断缩小区间来缩小解的范围,最终得出解的算法 我们定义一个c(x) 表示判断函数

如果对任意y>=x 当x满足条件的时候 y也满足条件 那么我们就一个不断缩小区间范围来确定最后的解

好扯了这么多犊子 来说下这道题目。。

我们的目的是对A,B 有 (x+A)/(y+B) == (p/q) 其中A<=B

那么可以转换为 A+x=k*p  B+y=k*q;

既 A=k*p-x, B=k*q-y;(A>=0,B>=0)

这里可以验证 对任意k >= x 当x满足条件的时候 k也满足条件(自己模拟一下就知道了)

ok 二分开搞

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <map>
#include <stack>
#include <algorithm>
#include <queue>
#include <string>
#include <cmath>
using namespace std;
const int inf=1000000000;
int main()
{
    int t;
    cin>>t;
    long long int x,y,p,q;
    while(t--)
    {
        cin>>x>>y>>p>>q;
        long long int temp=-1;
        long long int l=1;
        long long int r=inf;
        while(l <= r)
        {
            long long int mid=(l+r)/2;
            long long int A=mid*p-x;
            long long int B=mid*q-y;
            if(A>=0 && B>=0 && A<=B)
            {
                temp=mid;
                r=mid-1;
            }
            else l=mid+1;
        }
        if(temp==-1) cout<<"-1"<<endl;
        else cout<<temp*q-y<<endl;
    }
    return 0;
}

  

时间: 2025-01-06 02:46:53

codeforce C. Success Rate的相关文章

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 f

AC日记——Success Rate codeforces 807c

Success Rate 思路: 水题: 代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define ll long long inline void in(ll &now) { char Cget=getchar();now=0; while(Cget>'9'||Cget<'0

CodeForce-807C Success Rate(二分数学)

Success Rate CodeForces - 807C 给你4个数字 x y p q ,要求让你求最小的非负整数b,使得 (x+a)/(y+b)==p/q,同时a为一个整数且0<=a<=b. (0?≤?x?≤?y?≤?109; 0?≤?p?≤?q?≤?109; y?>?0; q?>?0) 解法: (x+a)/(y+b)==p/q; --> x+a=np; y+b=nq; --> a=np-x; b=nq-y; --> 二分n; #include <cs

Codeforces 807C - Success Rate

题目链接:http://codeforces.com/problemset/problem/807/C 题目大意:给你T组数据,每组有x,y,p,q四个数,x/y是你当前提交正确率,让你求出最少需要再提交几次可以达到目标正确率p/q; 解题思路:假设提交B次,正确A次,那么可以得到(x+A)/(y+B)=p/q,可以推出x+A=k*p,y+B=k*q.那么A=k*p-A,B=K*q-A; 这样我们只需要二分枚举k,判断A,B是否满足(0<=A<=B)即可. 1 #include<iost

Codeforces - 773A - Success Rate - 二分

https://codeforces.com/problemset/problem/773/A 一开始二分枚举d,使得(x+d)/(y+d)>=p/q&&x/(y+d)<=p/q,错在这些数是离散的,不能由两边异号判定一定存在这个交点. 然后改成枚举d,使得y=d*q,这样就一定是倍数了.然后就是要想清楚了,找不到这样卡在中间的d,其实都是因为d不够大的原因,d够大保证是可以的除非正确率是100%. 然后就是二分的上界,按道理q的最大值是1e9,y的最大值也是1e9,他们的公倍

实验 快速生成树配置

[实验名称] 快速生成树协议 RSTP 的配置. [实验目的] 理解快速生成树协议 RSTP 的工作原理,掌握如何在交换机上配置快速生成树. [背景描述] 某学校为了开展计算机教学和网络办公,建立了一个计算机教室和一个校办公区,这两 处的计算机网络通过两台交换机互连组成内部校园网,为了提高网络的可靠性,网络管理员 用 2 条链路将交换机互连,现要在交换机上做适当配置,使网络避免环路. [需求分析] 两台交换机以双链路互联,需要在启用 RSTP 避免环路的同时,提供链路的冗余备份功 能. [实验拓

CCNA的RIP路由学习

rip(routing infomation protocol,路由信息协议) ,是一个纯粹的距离矢量路由选择协议,RIP每隔30s就将自己完整的路由选择表从所有激活的接口上送出.RIP只将跳计数作为判断到达远程网络最佳路径的依据,并且在默认情况下允许最大的跳计数为15.也就是说,16就被认为不可达的. RIP版本1只使用有类的路由选择,即网络中的所有设备都必须使用相同的子网掩码.这是因为RIP版本1在发送更新数据中不携带子网掩码信息.RIP版本2提供了前缀路由选择信息,并可以在路由更新中传送子

CCNP路由实验之十六 策略路由(PBR)

?? 策略路由(PBR)是一种比基于目标网络进行路由更加灵活的数据包路由转发机制.路由器将通过路由图决定如何对需要路由的数据包进行处理,路由图决定了一个数据包的下一跳转发路由器.在路由器转发一个数据报文时,首先根据配置的规则对报文进行过滤,匹配成功则按照一定的转发策略进行报文转发.这种规则可以是基于标准和扩展访问控制列表,也可以基于报文的长度:而转发策略则是控制报文按照指定的策略路由表进行转发,也可以修改报文的IP优先字段,策略路由也可以在一定程度上实现流量工程,使不同服务质量的流或者不同性质的

PPP 网络验证

R1-S1/1-----------S1/0-R2 相关说明:在链路建立的第2个阶段进行用户验证,最常用的认证协议有口令验证协议PAP和挑战-握手协议CHAP.口令验证协议PAP是一种简单的明文验证方式,这种验证方式的安全性较差,第三方可以很容易的获取被传送的用户名和口令:挑战-握手验证协议CHAP是一种加密的验证方式,能够避免建立连接时传送用户的真实密码. 初始:配置各路由器的IP地址. Router>en Router#conf ter Router(config)#hostname r1