1 条题解

  • 0
    @ 2025-9-9 23:52:04

    C++ :

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <cstring>
    #include <set>
    #include <map>
    using namespace std;
    string s[11];
    set<char>st;
    map<char,double>mp;
    struct node{
        char c;
        double va;
    }p[27];
    bool cmp(node a,node b){
        return a.va<b.va;
    }
    int main(){
        int n;
        while(scanf("%d",&n)!=EOF){
            st.clear();
            for(int i=0;i<n;i++){
                cin>>s[i];
                for(int j=0;j<s[i].size();j++)
                    st.insert(s[i][j]);
            }
            int now=0; mp.clear();
            for(set<char>::iterator it=st.begin();it!=st.end();it++){
                p[++now].c=*it;
                p[now].va=now;
                mp[*it]=now;
            }
            /*for(int i=1;i<=now;i++)
                printf("%c %lf\n",p[i].c,p[i].va);
            */
            while(1){
                bool ok=true; bool _f=false;
                char x,y;
                for(int i=0;i<n;i++){
                    for(int j=0;j<s[i].size();j++){
                        for(int k=j+1;k<s[i].size();k++){
                            if(mp[s[i][j]]>mp[s[i][k]]){
                                x=s[i][j];
                                y=s[i][k];
                                _f=true;
                                break;
                            }
                        }
                        if(_f) break;
                    }
                    if(_f) break;
                }
                if(_f==false) break;
                int ii,jj;
                for(ii=1;ii<=now;ii++){
                    if(p[ii].c==x) break;
                }
                for(jj=1;jj<=now;jj++){
                    if(p[jj].c==y) break;
                }
                if(jj==1){
                    p[ii].va=p[jj].va-1;
                }
                else{
                    p[ii].va=(p[jj].va+p[jj-1].va)/2;
                }
                mp[p[ii].c]=p[ii].va;
                sort(p+1,p+1+now,cmp);
            }
            sort(p+1,p+1+now,cmp);
            for(int i=1;i<=now;i++) printf("%c",p[i].c);
            printf("\n");
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    1294
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者