ABC329

A

B

排序后遍历一下即可

C

void solve(){
    int n;cin>>n;
    string s;cin>>s;s=" "+s;
    vector<int>cnt(26);
    vector<int>a(26);
    rep(i,1,n){
        int k=s[i]-'a';
        a[k]++;
        if(i>=2&&k!=(s[i-1]-'a')){
            a[s[i-1]-'a']=0;
        }
        cnt[k]=max(cnt[k],a[k]);
    }
    int ans=0;
    rep(i,0,25){
        ans+=cnt[i];
    }
    cout<<ans<<endl;
}

D

模拟

void solve(){
    int n,m;cin>>n>>m;
    vector<int>tot(n+1);
    int ans=0;
    int temp=0;
    while(m--){
        int x;cin>>x;
        tot[x]++;
        if(tot[x]>ans){
            ans=tot[x];
            temp=x;
        }else if(tot[x]==ans){
            if(x<temp)temp=x;
        }
        cout<<temp<<endl;
    }
}

E

题意:
从一个######序列,不断拓印T,可以相互覆盖,是否能得到给定字符串S
思路:
倒过来看
字符串可以左边一部分被覆盖,右边一部分被覆盖,只剩下中间一部分
从左至右和从右至左删除满足条件的字符串即可

void solve(){
    int n,m;cin>>n>>m;
    string s,t;cin>>s>>t;
    for(int i=0;i<n;i++){
        int ok=1;
        for(int j=0;j<m;j++){
            if(s[i+j]==t[j]||s[i+j]=='#')continue;
            else {
                ok=0;break;
            }
        }

        if(ok){
            for(int j=0;j<m;j++){
                s[i+j]='#';
            }
        }
    }
    for(int i=n-1;i>=0;i--){
        int ok=1;
        for(int j=0;j<m;j++){
            if(s[i+j]==t[j]||s[i+j]=='#')continue;
            else{
                ok=0;break;
            }
        }
        if(ok){
            for(int j=0;j<m;j++){
                s[i+j]='#';
            }
        }
    }
    for(int i=0;i<n;i++){
        if(s[i]!='#'){
            cout<<"No"<<endl;return;
        }
    }
    cout<<"Yes"<<endl;
}

F

题意:
每个编号都有一个集合,每次把一个集合元素转移到另一个集合中,并输出这个集合的元素种类
思路:
启发式合并,把小集合合并到大集合中
时间复杂度为Qlogn

unordered_set<int>a[maxn];
void solve(){
    int n,q;cin>>n>>q;
    rep(i,1,n){
        int x;cin>>x;
        a[i].insert(x);
    }
    while(q--){
        int l,r;cin>>l>>r;
        // a[r].insert(a[l].begin(),a[l].end());
        // a[l].clear();
        if(a[r].size()>a[l].size()){
            a[r].insert(a[l].begin(),a[l].end());
            a[l].clear();
        }else{
            a[l].insert(a[r].begin(),a[r].end());
            a[r].clear();
            swap(a[l],a[r]);
        }
        cout<<a[r].size()<<endl;
    }
}
posted @ 2025-06-11 16:48  Marinaco  阅读(6)  评论(0)    收藏  举报
//雪花飘落效果