Success Rate CodeForces - 807C (数学+二分)

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 xyp and q (0 ≤ x ≤ y ≤ 1090 ≤ p ≤ q ≤ 109y > 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.

题目链接:

CodeForces - 807C 

题意:给你4个整数,x,y,p,q,P/Q的范围是[0,1],让你求最小的提交数量b,其中a个提交成功使 ( x + a ) / ( y + b ) == p / q

我们设一个系数n,使

p*n=x+a

q*n=y+b

那么,

a=p*n-x

b=q*n-y

根据题意,我们知道a和b满足的条件为b>=a>=0

并且观察可知a和n呈正相关,那么我们要求最小的a,可以通过二分n来得到

根据题目的数据范围,n的二分区间为0~1e9

注意下-1的情况就行了。

细节看我的AC代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define gg(x) getInt(&x)
using namespace std;
typedef long long ll;
inline void getInt(int* p);
const int maxn=1000010;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
int t;
ll x,y,a,b;
int main()
{gbtb;cin>>t;while(t--){cin>>x>>y>>a>>b;ll l=0;ll r=1e9;ll mid;ll ans=-1;while(l<=r){mid=(l+r)>>1;ll a1=a*mid-x;ll a2=b*mid-y;if(a1>=0&&a2>=0&&(a1<=a2)){ans=mid;r=mid-1;}else{l=mid+1;}}if(ans==-1){cout<<-1<<endl;}else{cout<<b*ans-y<<endl;}}return 0;
}inline void getInt(int* p) {char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}}else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}}
}

 

转载于:https://www.cnblogs.com/qieqiemin/p/10272282.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[vue] 实际工作中,你总结的vue最佳实践有哪些?

[vue] 实际工作中&#xff0c;你总结的vue最佳实践有哪些&#xff1f; .babelrc 是目前 babel-polyfill 的最佳实践 { "presets": [ [ "babel/preset-env", { "corejs": "3", "modules": false, "useBuiltIns": …

Epson打印机连接wifi

环境 Epson L3153 打印机联通无线光猫 背景 最近家里的联通宽带不太稳定&#xff0c;经常断网。今天打了联通客服电话&#xff0c;师傅上门来&#xff0c;说可能是光猫用的时间太长了&#xff0c;换了一个新的联通光猫&#xff0c;问题解决。 wifi的名称是 CU_Y3ft 和 CU_Y3…

[vue] vue给组件绑定自定义事件无效怎么解决?

[vue] vue给组件绑定自定义事件无效怎么解决&#xff1f; 两种方式 1、组件外部加修饰符.navtive 2、组件内部声明$emit(自定义事件)个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一…

ES6笔记 -- 变量/语句声明

关于变量声明 let的作用是声明一个作用域为某个代码块({})的变量(称为块级作用域)let不允许变量提升(注: 变量的使用在声明之前)块级作用域里的let命令之前的区域称之为暂时性死区, 这意味着死区内即使是typeof操作也会出错let不允许在相同的作用域内重复声明同一个变量, 值得一…

[vue] vue的属性名称与method的方法名称一样时会发生什么问题?

[vue] vue的属性名称与method的方法名称一样时会发生什么问题&#xff1f; 键名优先级&#xff1a;props > data > methods个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起…

括号序列

题目描述 一个由小括号组成的字符串可以被称为一个括号序列。但一个括号序列可能并不满足括号匹配的要求。因此&#xff0c;我们可以进一步将满足括号匹配的括号序列成为“标准的括号序列。例如字符串")((())"是一个括号序列但不是标准的括号序列&#xff0c;而字符串…

[vue] vue变量名如果以_、$开头的属性会发生什么问题?怎么访问到它们的值?

[vue] vue变量名如果以_、$开头的属性会发生什么问题&#xff1f;怎么访问到它们的值&#xff1f; 报错 变量未定义 以 _ 或 $ 开头的属性 不会 被 Vue 实例代理&#xff0c;因为它们可能和 Vue 内置的属性、API 方法冲突。 你可以使用例如 $data.xxx或者_data.xxx 的方式访问…

[vue] vue使用v-for遍历对象时,是按什么顺序遍历的?如何保证顺序?

[vue] vue使用v-for遍历对象时&#xff0c;是按什么顺序遍历的&#xff1f;如何保证顺序&#xff1f; image 1、会先判断是否有iterator接口&#xff0c;如果有循环执行next()方法 2、没有iterator的情况下&#xff0c;会调用Object.keys()方法&#xff0c;在不同浏览器中&…

[vue] vue如果想扩展某个现有的组件时,怎么做呢?

[vue] vue如果想扩展某个现有的组件时&#xff0c;怎么做呢&#xff1f; 不对原组件进行更改的&#xff1a;使用Vue.extend直接扩展使用Vue.mixin全局混入HOC封装个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大…

typescript在ES3(IE7)环境下使用async、await

因为公司产品需要搞个Web App&#xff0c;但是又需要兼容IE7&#xff0c;这时候整个应用会非常复杂&#xff0c;尤其是在处理异步的时候&#xff0c;在我的选择中有两个方案 callback方案async/await经过衡量以后&#xff0c;决定使用async/await方案 配置typescript环境 $ mkd…

与歌谣通关前端面试题【CSS篇汇总目录】

我是歌谣 放弃很容易 但坚持一定很酷 欢迎 关注公众号小歌谣一起讨论前后端知识 CSS汇总 【CSS】 [css] 圣杯布局和双飞翼布局的理解和区别&#xff0c;并用代码实现 [css] CSS3有哪些新增的特性&#xff1f; [css] 在页面上隐藏元素的方法有哪些&#xff1f; [css] CSS选…

【LeetCode】按 tag 分类索引 (900题以下)

链表&#xff1a;https://www.cnblogs.com/zhangwanying/p/9797184.html &#xff08;共34题&#xff09; 数组&#xff1a;https://www.cnblogs.com/zhangwanying/p/9610923.html &#xff08;共139题&#xff09; 树&#xff1a;https://www.cnblogs.com/zhangwanying/p/67…

一个下载Google code源码的 绿色、迷你工具 MiniSVN v1.0

一个下载Google code源码的 绿色、迷你工具 MiniSVN v1.0 想下载Google code中的源码 不需要装各种软件&#xff0c;只需要一个小工具即可&#xff01; 如何使用&#xff1f; 访问一个谷歌开源项目网站&#xff0c;比如&#xff1a;https://code.google.com/p/deguang-ticke…

[vue] v-on可以绑定多个方法吗?

[vue] v-on可以绑定多个方法吗&#xff1f; <input type"text" :value"name" input"onInput" focus"onFocus" blur"onBlur" />个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c;…

[NOI2018]你的名字

SAM写的太不熟练了~~SAM上的线段树合并也不熟练~~~ 调了半天样例 题目大意&#xff1a; 给定一个S&#xff0c;Q次询问&#xff0c;每次给出T&#xff0c;l,r, 求对于S[l,r]&#xff0c;属于T的子串却不属于S[l,r]的子串有多少个 看上去挺简洁的一个问题。。。 暴力68pts 对于S…

Visual.Assist.X.V10.7.1940的汉化破解补丁

Visual Assist X V10.7.1940的汉化破解补丁&#xff0c;方便各位朋友。 从该版本开始&#xff0c;本博客会跟踪升级&#xff0c;请留意。 关于菜单的汉化请看&#xff1a;http://blog.csdn.net/afu45/article/details/9145293 汉化方法 先安装英文原版软件。下载地址&#…

此时无足够的可用内存,无法满足操作的预期要求,可能是由于虚拟地址随便造成的。请稍候重试。 .

vs提示“此时无足够的可用内存&#xff0c;无法满足操作的预期要求&#xff0c;可能是由于虚拟地址随便造成的。请稍候重试。” 下载下面的补丁就可以了 . 下载地址&#xff1a; http://download.csdn.net/detail/afu45/4053280

java目录

阅读目录&#xff1a; 0.Java下载安装1.HelloWorld2.Java语言基础&#xff1a;关键字3.Java语言基础&#xff1a;表示符4.Java语言基础&#xff1a;注释5.Java语言基础&#xff1a;常量和变量6.Java语言基础&#xff1a;运算符7.Java语言基础&#xff1a;语句8.Java语言基础&am…

HDU-2112-HDU Today

这题的话&#xff0c;坑点挺多的&#xff0c;我也WA了好几次。 首先&#xff0c;对于map&#xff0c;因为是多次使用&#xff0c;所以每次处理完一个图之后就要清空。 其次&#xff0c;就是对于DIjkstra跑图的时候&#xff0c;如果这个图是连通图的话&#xff0c;我们每次选取最…

Visual.Assist.X 菜单汉化

在Visual Studio 2010下 使用 Visual.Assist.X.V10.7.1940汉化破解补丁 之后&#xff0c; 细心的朋友会发现&#xff1a;Visual Studio的菜单内还是英文的。其实这个也是可以汉化的&#xff0c;方法如下&#xff1a; 在Microsoft Visual Studio的菜单上右键单击 -》 选择最后…