传送门:Sky Inc, Programming Contest 2023(AtCoder Beginner Contest 329) - AtCoder
A,B,C,D
这四道题比较简单,就不多叙述。
E - Stamp
这题是一道比较经典的涂色问题。

我们可以知道,如果存在覆盖相交的话,要么前面盖住后面,要么后面盖住前面,则他们的首尾一定会留下痕迹。所以我们正反遍历,可以得到答案。
代码如下:
#pragma GCC optimize(3)  //O2优化开启
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PII;
const int N=998244353;
const int MX=0x3f3f3f3f3f3f3f3f; 
int n,m;
string s,t;
bool pan(string x){
    for(int i=0;i<m;i++){
        if(x[i]=='#'||x[i]==t[i])continue;
        else return 0;
    }
    return 1;
}
void icealsoheat(){
    cin>>n>>m;
    cin>>s>>t;
    for(int i=m-1;i<n;i++){
        if(pan(s.substr(i-m+1,m))){
            for(int j=i-m+1;j<=i;j++){
                s[j]='#';
            }
        }
    }
    for(int i=n-1;i>=m-1;i--){
        if(pan(s.substr(i-m+1,m))){
            for(int j=i-m+1;j<=i;j++){
                s[j]='#';
            }
        }
    }
    for(int i=0;i<n;i++){
        if(s[i]!='#'){
            puts("No");
            return;
        }
    }
    puts("Yes");
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie();
    cout.tie();
    int _yq;
    _yq=1;
    // cin>>_yq;
    while(_yq--){
        icealsoheat();
    }
}F - Colored Ball

这道题的时间复杂度比较巧妙,我们每次都让最小的去合并最大的,最后的时间复杂度为O(n)。确实让我开拓了眼界。是启发式合并的思想。
代码如下:
#pragma GCC optimize(3)  //O2优化开启
#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
typedef pair<int,int> PII;
const int N=998244353;
const int MX=0x3f3f3f3f3f3f3f3f; 
int n,q;
int c[1000005];
set<int>s[200005];
int id[200005];
void icealsoheat(){
    cin>>n>>q;
    for(int i=1;i<=n;i++){
        cin>>c[i];
        id[i]=i;
        s[i].insert(c[i]);
    }
    while(q--){
        int a,b;
        cin>>a>>b;
        int x=id[a];
        if(s[id[a]].size()>s[id[b]].size()){
            swap(id[a],id[b]);
        }
        for(auto i:s[id[a]]){
            s[id[b]].insert(i);
        }
        s[id[a]].clear();
        cout<<s[id[b]].size()<<"\n";
    }
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie();
    cout.tie();
    int _yq;
    _yq=1;
    // cin>>_yq;
    while(_yq--){
        icealsoheat();
    }
}G - Delivery on Tree

较难,自己码了166行代码,不过最后以失败告终。待补。。。。。



















