题目P1341无序字母对
#include<iostream>
using namespace std;
int cti(char x){
if(x>='A' and x<='Z') return (int)(x-64);
else return (int)(x-70);
}
char itc(int x){
if(x>=1 and x<=26) return(char)(x+64);
else return (char)(x+70);
}
int maps[53][53]={0},st=1;
int ans[26*26+1],in[53],con=0;
bool vis[53]={0};
void dfs(int i){
for(int j=1;j<=52;j++)
if(maps[i][j]){
maps[i][j]--;
maps[j][i]--;
dfs(j);
}
ans[con++]=i;
}
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++) {
char x,y;
cin>>x>>y;
int a=cti(x),b=cti(y);
maps[a][b]=maps[b][a]=1;
in[a]++,in[b]++;
vis[a]=vis[b]=1;
}
while(!vis[st]) st++;
int jd=0;
for(int i=1;i<=52;i++){
if(vis[i] and in[i]%2!=0) jd++;
}
if(jd>2) {
cout<<"No Solution";return 0;
}
for(int i=1;i<=52;i++){
if(in[i]%2!=0) st=i;break;}
dfs(st);
for(int i=con-1;i>=0;i--) cout<<itc(ans[i]);
}
本题只A了三个点,后面的都MLE了。。。改过数组大小但没用,求解答
蒟蒻,请大佬勿喷