专栏文章

题解:CF1155C Alarm Clocks Everywhere

CF1155C题解参与者 2已保存评论 2

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
2 条
当前快照
1 份
快照标识符
@miqecop5
此快照首次捕获于
2025/12/04 03:25
3 个月前
此快照最后确认于
2025/12/04 03:25
3 个月前
查看原文

题目分析

第二行输入了每次闹钟响的时间,第三行输入了间隔时间。而 xix_ipip_i 都非常大,所以无法暴力。后来转念一想,任意一个 pip_i 如果是他们的最大公因数,就输出 Yes,否则就输出 NO,这道题的核心就是求最大公因数。

题目解法

其实分析完题目,就大致知道怎么写了。本题就是求这些时间间隔之差的最大公因数。最后再循环枚举 pip_i 能否被他们的最大公因数整除,能就输出 YES,然后输出 x1x_1 和当前的 pip_i 就可以结束了,否则输出 NO

AC 代码

CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int n,m;
	cin>>n>>m;
	int a;
	cin>>a;
	int gcd=0;
	for(int i=1;i<n;i++){
		int x;
		cin>>x;
		if(x-a==0)gcd=a;
		else gcd=__gcd(gcd,abs(x-a));
	}
	for(int i=1;i<=m;i++){
		int p;
		cin>>p;
		if(gcd%p==0){
			cout<<"YES\n"<<a<<" "<<i;
			return 0;
		}
	}
	cout<<"NO";
}

评论

2 条评论,欢迎与作者交流。

正在加载评论...