比赛 csp2025模拟练习1 评测结果 AAAAAAAAAAAAAAAAAAAAAAAAA
题目名称 麻烦的键盘 最终得分 100
用户昵称 健康铀 运行时间 0.141 s
代码语言 C++ 内存使用 3.91 MiB
提交时间 2025-10-28 10:38:29
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
string s1,s2;
int n1,n2,c1[26],c2[26];
set<char> A,B;

bool check(char X,char Y,char Z){
    int i=0,j=0;
    while(i<n1&&j<n2){
        if(s1[i]==Z){i++;continue;}
        if(s1[i]==X){
            if(s2[j]!=Y)return 0;
            i++;j++;
        }else{
            if(s1[i]!=s2[j])return 0;
            i++;j++;
        }
    }
    while(i<n1){
        if(s1[i]!=Z)return 0;
        i++;
    }
    return j==n2;
}

bool adj(char X,char Z){
    for(int i=0;i<n1-1;i++)
        if((s1[i]==X&&s1[i+1]==Z)||(s1[i]==Z&&s1[i+1]==X))
            return 1;
    return 0;
}

int main(){
	freopen("troublekey.in","r",stdin);
	freopen("troublekey.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);
    getline(cin,s1);
    getline(cin,s2);
    n1=s1.size(),n2=s2.size();
    for(char c:s1)c1[c-'a']++;
    for(char c:s2)c2[c-'a']++;
    for(int i=0;i<26;i++){
        if(c1[i]&&!c2[i])A.insert('a'+i);
        if(c2[i]&&!c1[i])B.insert('a'+i);
    }
    if(n1==n2){
        for(char X:A){
            for(char Y:B){
                if(c1[X-'a']==c2[Y-'a']&&check(X,Y,0)){
                    cout<<X<<' '<<Y<<'\n'<<"-\n";
                    return 0;
                }
            }
        }
    }else{
        int d=n1-n2;
        for(char Z:A){
            if(c1[Z-'a']!=d)continue;
            for(char X:A){
                if(X==Z)continue;
                for(char Y:B){
                    if(c1[X-'a']==c2[Y-'a']&&!adj(X,Z)&&check(X,Y,Z)){
                        cout<<X<<' '<<Y<<'\n'<<Z<<'\n';
                        return 0;
                    }
                }
            }
        }
    }
    return 0;
}