题目链接

示例1
输入
3
3 4 10 1 2
2 4 5 1 1
3 5 11 1 1
输出
YES
NO
NO
说明

第一问,青蛙晚上向右跳1次,白天无法与兔子相遇。青蛙向右跳2次,也就是2a=6的距离,白天兔子向左跳1次,可以相遇。所以在跳[1,2]次中,存在青蛙和兔子可以相遇。
第二问,青蛙晚上向右跳1次,然后无论白天兔子怎么跳,都无法和青蛙相遇。

解题思路:

青蛙白天休息,晚上行动,兔子相反。
题目给出了青蛙移动的限制,但兔子没有移动的限制
所有可以得出公式 :存在x,y是整数 有 ax = n-by
公式解释,因为兔子可以随意跳,那么只需要满足青蛙跳到兔子跳y次能跳到的地方即可(设青蛙跳x次)
公式变形 ax+by = n
由裴蜀定理可知,n一定是gcd(a,b)的倍数,也就是说 gcd(a,b)|n
可以用扩展欧几里得算法得出gcd(a,b)和满足ax+by=gcd(a,b)的x和y
如果记为x’和y’
ax’+by’=gcd(a,b)
如果要满足ax+by=n 需要gcd(a,b)|n. 那么 ax+by=(n/gcd(a,b))(ax’+by’)=n

设gcd(a,b)=d
可得 x=x’*n/d y=y’*n/d
ax+by=n 变成 (n/d)x’a+b(n/d)*y’=d(n/d)
这里还是特解,需要求通解继续变形
ax+by=n 变成 (a/d)x+(b/d)y=n/d 那么gcd(a/d,b/d)=1;
根据扩展欧几里得的一个常用定理来得到通解
设x0=(n/d)x’ ,y0=(n/d)y’
那么x0+b/d * t 和 y0+a/d *t 是ax+by=n 的一个通解
则最小正整数解为:(x’ * (n/d) % (b /d) + (b / d) )% (b / d);
既然最小正整数解出来了,这题就好做了

Heltion的代码

#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
i64 exgcd(i64 a, i64 b, i64 &x, i64 &y) {if (not b) {return x = 1, y = 0, a;}i64 d = exgcd(b, a % b, x, y);tie(x, y) = make_pair(y, x - a / b * y);return d;
}
int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int t;for (cin >> t; t; t -= 1) {i64 a, b, n, l, r, x, y;cin >> a >> b >> n >> l >> r;i64 d = exgcd(a, b, x, y);if (n % d) {cout << "NO\n";} else {b /= d;x = (x * (n / d) % b + b) % b;//最小正整数解i64 y = l / b * b + x;if (y < l) {y += b;}cout << (y <= r ? "YES\n" : "NO\n");}}
}

解析:

由上述解析可知,如果gcd(a,b)|n不成立,直接no,即n%d!=0

牛客练习赛111 D青蛙兔子的约会相关推荐

  1. 解题报告(一)C、(牛客练习赛41 F)简单数学题(数论 + FWT)(3.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

  2. 牛客练习赛29 题解

    牛客练习赛29 A. 可持久化动态图上树状数组维护01背包 题解 这题跟标题没有任何关系- 贪心的使得负数删除的时候下标尽可能大,然后正数的时候下标尽可能小. 观察到每个数下标最大的时候就是它的初始下 ...

  3. 牛客练习赛81 E. 小 Q 与函数求和 1( “简单莫比乌斯反演” ,欧拉函数性质)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 牛客练习赛81 E. 小 Q 与函数求和 1( "简单莫比乌斯反演" ) Prob ...

  4. 牛客练习赛34 E little w and Digital Root(数位dp)

    title: 牛客练习赛34 E little w and Digital Root(数位dp) date: 2018-12-17 22:38:37 tags: 数位dp categories:ACM ...

  5. 牛客练习赛34 - C little w and Segment Coverage(思维、树状数组)

    title: 牛客练习赛34 - C little w and Segment Coverage(思维.树状数组) date: 2018-12-15 16:36:55 tags: [树状数组,思维] ...

  6. 牛客练习赛52 | C | [烹饪] (DP,裴蜀定理,gcd)

    牛客练习赛52 C 烹饪 链接:https://ac.nowcoder.com/acm/contest/1084/C来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 327 ...

  7. 牛客练习赛73 D 离别(线段树+右端点排序离线查询)

    牛客练习赛73 D 离别 思路: 对于每一个固定的右端点i,我们都找到一个区间(l,r)使得区间中的点为左端点时 里面最大的的种数为k. 这个可以用队列或者vector来维护. 然后我们对于q个查询, ...

  8. 牛客练习赛75 D 减数游戏(队列优化(需要取模的)堆)

    牛客练习赛75 D 减数游戏 思路:写一下式子可以发每次选择最小的两个数进行操作,最后得到的答案会是最大的,那我们可以将它放进一个最小堆中来维护,但是里面的数是需要取模的,当它取模的时候,将会变小.那 ...

  9. 妄想集合(牛客练习赛90)

    妄想集合(牛客练习赛90) 题意: 开始有 n 个可重集合,开始时每一个集合中都有一个数,有 m 个操作. Quant l r x\text{Quant l r x}Quant l r x:往编号在 ...

最新文章

  1. (十六)java springcloud版b2b2c社交电商spring cloud分布式微服务-使用spring cloud Bus刷新配置...
  2. 计算机一级汉字录入在线联系,计算机一级考试指导:汉字录入题的操作
  3. Python time mktime()方法
  4. Oracle 11g R2 ADG 运维
  5. Tomcat5.5链接Oracle、DB2、MySQL数据源实现JSP下拉框的填充
  6. 160809312 王仲超 第四次作业
  7. oracle10rac asm hpux,oracle 10g rac asm上面的控制文件损坏既增加方法
  8. PMP试题 | 每日一练,快速提分 9.1
  9. 浙大 PAT 甲级 1077 Kuchiguse
  10. echarts双柱_R+Echarts画双坐标轴折柱混合图
  11. PHP队列研究一(数据库任务队列)
  12. 折腾开源WRT的AC无线路由之路-1
  13. 利用PHP HTML5 MySQL 将表单提交的数据写到数据库
  14. matlab 冒号范围,MATLAB中冒号的用法
  15. 目录打开显示提示文件或目录损坏且无法读取、文件或目录损坏且无法读取的破解之道
  16. axios 重定向问题解决_如何使用React Router V4从axios拦截器重定向?
  17. 在Vista下删除EISA配置的隐藏分区
  18. java 动态规划找零钱_初探动态规划——LeetCode找零钱问题
  19. 北大AI公开课第七课--AI赋能 智赢未来by科大讯飞胡郁
  20. linux系统中如何关闭后台运行的进程

热门文章

  1. 基于python的OCR字符识别
  2. idea新建项目报错org.codehaus.plexus.component.repository.exception.ComponentLookupException:
  3. 你需要OKR管理绩效管理来协助企业高效执行
  4. CSS3 Animated Gears
  5. 二级python多少分过关_全国计算机二级考试多少分才算合格
  6. oracle 如何重置用户密码
  7. CentOS7上搭建ftp服务
  8. Camera:双摄基本原理
  9. 盛大游戏张蓥锋:聚焦IP迭代 打造百年老店
  10. python安装bs4几种方法_python3如何安装bs4