CF1714E 1400
题意
解析
由图得 a中不能同时存在 5 的倍数和非 5 的倍数。
若全为 5 的倍数,将她们的末尾全部操作为 0,判断相等即可。
若全非 5 的倍数,将她们的末尾全部操作为 2。由于2→4→8→6→2 绕一圈后原数会 +20,所以我们判断这些数是否 mod 20 同余即可。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 10,M = 1e6 + 10;
int t,n,m,a[N],b[N],s[N],l;
int lei(int x){
if(x == 3 || x == 6 || x == 7 || x == 9) return 1;
return 2;
}
bool check(){
// 3 || 6 || 7 || 9
// 2 || 1 || 4 || 8
for(int i=2;i<=n;i++){
if(lei(a[1]%10) == lei(a[i]%10)){
// cout << lei(a[1]%10) << ":" <<lei(a[i]%10)<<" ";
if(abs(a[i]/10 - a[1]/10) % 2 == 1) return false;
}else{
if(abs(a[i]/10 - a[1]/10) % 2 == 0) return false;
}
}
return true;
}
int main(){
cin >> t;
while(t--){
scanf("%d",&n);
int x = 0,y = 0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
if(a[i] % 10 == 5 || a[i] % 10 == 0) y = 1;
else x = 1;
}
if(x && y){
puts("NO");
}else if(x){
if(check()) puts("YES");
else puts("NO");
}else{
int flag = true;
for(int i=1;i<=n;i++){
if(a[i]%10==5) a[i]+=5;
if(i>1&&a[i]!=a[i-1]) flag = false;
}
if(flag) puts("YES");
else puts("NO");
}
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探