1 solutions

  • 0
    @ 2025-11-5 19:35:14

    C++ :

    #include <iostream>  
    #include <cstring>  
    using namespace std;   
    int main()  
    {  
        string str,dat[40001];  
        int maxr=0,num[26],temp[26],tt=0,sc[26]={2,5,4,4,1,6,5,5,1,7,6,3,5,2,3,5,7,2,1,2,4,6,6,7,5,7};  
        memset(num,0,sizeof(num));  
        cin>>str;  
        for (int i=0;i<str.size();i++) num[str[i]-'a']++;  
        cin>>str;  
        while (str!=".")  
        {  
              bool okay=1;  
              memset(temp,0,sizeof(temp));  
              for (int i=0;i<str.size();i++) temp[str[i]-'a']++;  
              for (int i=0;i<26;i++) if (temp[i]>num[i]){  
                  okay=0;break;  
              }  
              if (okay) dat[++tt]=str;  
              cin>>str;  
        }  
        dat[++tt]="";  
        for (int i=1;i<tt;i++)  
            for (int j=i+1;j<=tt;j++)  
            {  
                memset(temp,0,sizeof(temp));  
                for (int k=0;k<dat[i].size();k++)  
                    temp[dat[i][k]-'a']++;  
                for (int k=0;k<dat[j].size();k++)  
                    temp[dat[j][k]-'a']++;  
                bool okay=1;  
                int sum=0;  
                for (int k=0;k<26;k++)  
                    if (temp[k]>num[k]){  
                                        okay=0;  
                                        break;  
                                        }  
                if (!okay) continue;  
                for (int k=0;k<26;k++)  
                    sum+=sc[k]*temp[k];  
                if (sum>maxr) maxr=sum;  
            }  
        cout<<maxr<<endl;  
        for (int i=1;i<tt;i++)  
            for (int j=i+1;j<=tt;j++)  
            {  
                memset(temp,0,sizeof(temp));  
                for (int k=0;k<dat[i].size();k++)  
                    temp[dat[i][k]-'a']++;  
                for (int k=0;k<dat[j].size();k++)  
                    temp[dat[j][k]-'a']++;  
                bool okay=1;  
                int sum=0;  
                for (int k=0;k<26;k++)  
                    if (temp[k]>num[k]){  
                                        okay=0;  
                                        break;  
                                        }  
                if (!okay) continue;  
                for (int k=0;k<26;k++)  
                    sum+=sc[k]*temp[k];  
                if (sum==maxr) {  
                               cout<<dat[i];  
                               if (dat[j]!="") cout<<" "<<dat[j];  
                               cout<<endl;  
                               }  
            }      
        return 0;  
    } 
    
    • 1

    Information

    ID
    19423
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By