【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;
}
posted @   MNNUACM_2024ZY  阅读(277)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示