题解 [AGC026B] rng_10s

【洛谷专栏】

多校联考考这个题,然后因为大样例给的太水了很多人因此挂分。

题意

AB 时,AAB,如果此时 ACAA+D

请问能否无限循环执行下去。

分析

首先分析几个比较容易判断的条件。

A<B 时不会进入循环,所以不能。

D<B 时即使进入了循环也没有用,因为即使能加也不能使 A 回到原来的水平。

对于剩下的情况,此时已经保证了 ABDB

一种显然会无限循环的情况是 CB1,因为当 A<B 时必然满足 AC 的情况,且 DB,所以一定又会将 A 加回 AB 的状态。

剩下的情况是绝对无解或有解的吗?并不是。

如果我们可以找到一个非负整数 k 使得 (a+k(db))modb>c,也就是说经过一定的操作后 C<A<B,那么就不能继续循环了。

将上面那个式子转化为同余方程 kdxa(modb),需要找到一个 x(c,b) 使得该同余方程有解。

根据裴蜀定理,同余方程有解的条件是 gcd(b,d)(xa),于是我们直接求最大的 x 即可。

单次时间复杂度 O(logn)

代码

//the code is from chenjh
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL;
LL a,b,c,d;
void solve(){
	scanf("%lld%lld%lld%lld",&a,&b,&c,&d);
	if(d<b||a<b) puts("No");
	else{
		if(c>=b-1) puts("Yes");
		else{
			LL g=__gcd(d,b);
			a%=b;
			LL x=(b-1-a)/g*g;
			puts((a+x)%b>c?"No":"Yes");
		}
	}
}
int main(){
	int T;scanf("%d",&T);
	while(T--) solve();
	return 0;
}
posted @   Chen_Jinhui  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)

一言

你将不再是道具,而是成为人如其名的人。
——紫罗兰的永恒花园
点击右上角即可分享
微信分享提示