rt:
#include<bits/stdc++.h>
using namespace std;
bool mp[30][30];
string he(char one,char other,string s){
string num;
for(int i=0;i<s.size();i++)
if(s[i]==one||s[i]==other)num+=s[i];
return num;
}
int main(){
string s,t;cin>>s>>t;
for(char i='a';i<'r';i++)
for(char j=i+1;j<='r';j++)
mp[j-'a'][i-'a']=mp[i-'a'][j-'a']=(he(i,j,s)==he(i,j,t));
int q;cin>>q;
while(q--){
bool flag=false;
string str;cin>>str;
for(int i=0;i<str.size()-1;i++){
for(int j=i+1;j<str.size();j++)
if(!mp[str[i]-'a'][str[j]-'a']){
cout<<"N";
flag=true;
break;
}
if(flag)break;
}
if(flag)continue;
cout<<"Y";
}
return 0;
}
如代码,15行与22行的循环我进行了一个优化,没有枚举所有的组合,尤其在16行正反都进行了赋值,理论上应该是没有问题的,可却WA了
然后我改成了:
for(char i='a';i<'r';i++)
for(char j='a';j<='r';j++)
mp[j-'a'][i-'a']=mp[i-'a'][j-'a']=(he(i,j,s)==he(i,j,t));
和:
for(int i=0;i<str.size();i++){
for(int j=0;j<str.size();j++)
if(!mp[str[i]-'a'][str[j]-'a']){
cout<<"N";
flag=true;
break;
}
就AC了,并且必须两个都改,只改一个都WA。