【CodeForces训练记录】Educational Codeforces Round 174 (Rated for Div. 2)
训练情况
赛后反思
被英语读题背刺了,原来 C 题里面的 an element 不是 exacly one element 的意思,是 at least one element,读错题被一直硬控,这题没做出来的死因是高中组合数学。
A题
我们手玩样例可以发现 101 的情况必定不合法,abcd,第一个1说明abc相等,第三个1说明bcd相等,那么abcd就相等,与中间的 0 不相等矛盾,所以判断这个即可
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
int n; cin>>n;
vector<int> a(n);
for(int i = 1;i<=n-2;i++) cin>>a[i];
bool flag = true;
for(int i = 3;i<=n-2;i++){
if(a[i-2] == 1 && a[i-1] == 0 && a[i] == 1) flag = false;
}
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
signed main(){
int T; cin>>T; while(T--)
solve();
return 0;
}
B题
有个观察小性质,我们发现对于联通块大小等于一的同种颜色,显然操作 \(1\) 次即可,联通块大小大于一的同种颜色,操作 \(2\) 次必然能全部改掉,所以我们只要根据联通块的大小分类讨论求答案即可,最后把贡献最大的去掉,剩下的和就是答案了
点击查看代码
#include <bits/stdc++.h>
// #define int long long
#define endl '\n'
using namespace std;
void solve(){
int n,m; cin>>n>>m;
vector<vector<int>> a(n + 1,vector<int>(m + 1));
vector<int> v(n*m+1);
for(int i = 1;i<=n;i++){
for(int j = 1;j<=m;j++){
cin>>a[i][j];
v[a[i][j]] = 1;
}
}
for(int i = 1;i<=n;i++){
for(int j = 1;j<m;j++){
if(a[i][j] == a[i][j+1]) v[a[i][j]] = 2;
}
}
for(int i = 1;i<n;i++){
for(int j = 1;j<=m;j++){
if(a[i][j] == a[i+1][j]) v[a[i][j]] = 2;
}
}
sort(v.begin() + 1,v.end());
int ans = 0;
for(int i = 1;i<=n*m-1;i++){
ans += v[i];
}
cout<<ans<<endl;
}
signed main(){
int T; cin>>T; while(T--)
solve();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具