CF1656C. Make Equal With Mod
题目传送门
题意
给你一个序列, 每次可以选择一个数 , , 让序列中每个数对 取模, 问是否可以进行若干操作使得所有数字相同
题解
考虑假如不存在 , 我们可以每次模最大的数, 使得所有数都为
如果存在 , 那么 显然永远都是 , 所以 只要存在两个就寄了
然后你考虑, 是不是可以让所有数都变成 , 对于一个 , 我们要对取模才能得到, 但如果序列中存在就寄了
考虑一个不存在连续数字的序列, 显然可以用上述做法, 对于有相邻数字 时, 他们在模意义下也应该时连续的, 其中一个变为的话, 那么另外一个要么是, 要么是, 不成立
话说这一场cf好多结论题啊, 炫酷是炫酷,但有点过于炫酷了.........
实现
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int read(){
int num=0, flag=1; char c=getchar();
while(!isdigit(c) && c!='-') c=getchar();
if(c == '-') c=getchar(), flag=-1;
while(isdigit(c)) num=num*10+c-'0', c=getchar();
return num*flag;
}
const int N = 290005;
int T, n; int a[N];
void solve(){
int flag = 0;
for(int i=1; i<=n; i++){
a[i]=read();
if(a[i] == 1) flag = 1;
}
if(!flag){
printf("YES\n");
return ;
}else{
sort(a+1, a+1+n);
for(int i=2; i<=n; i++){
if(a[i] == a[i-1]+1){
printf("NO\n");
return ;
}
}
printf("YES\n");
}
}
int main(){
T = read();
while(T--){
n = read();
solve();
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】