社区讨论

仍然50的我

P1341无序字母对参与者 4已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mi6m630s
此快照首次捕获于
2025/11/20 07:08
4 个月前
此快照最后确认于
2025/11/20 07:08
4 个月前
查看原帖

50分的我

CPP
#include<bits/stdc++.h>
using namespace std;
bool road[55][55],used[55][55];int n,cnt,rem1,rem2,lale;
int maps(char a){
    if(a<='z'&&a>='a')return a-'a'+27;
    return a-'A'+1;
}
char fmaps(int x){
    if(x<=26)    return 'A'+x-1;
    return 'a'+x-27;
}
char t1,t2;
queue<int>ans;
void dfs(int start){
    ans.push(start);
    for(int i=1;i<=52;i++){
        if(road[start][i]&&!used[start][i]){
            used[start][i]=1;used[i][start]=1;
            dfs(i);
        }
    }
}
int main(){
//  freopen("","r",stdin);
//  freopen("","w",stdout);
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>t1>>t2;
        road[maps(t1)][maps(t2)]=1;
        road[maps(t2)][maps(t1)]=1;
        road[maps(t1)][0]=(road[maps(t1)][0]+1)%2;
        road[maps(t1)][54]++;road[maps(t2)][54]++;
        road[maps(t2)][0]=(road[maps(t2)][0]+1)%2;
    }
    for(int i=1;i<=52;i++){
        if(road[i][0]==1){
            cnt++;
            if(cnt==1)rem1=i;
            else if(cnt==2)rem2=i;
            else if(cnt>2){
                cout<<"No Solution";
                return 0;
            }
        }if(road[i][54]>0&&lale==0)lale=i;
    }    
    if(cnt==1){
        cout<<"No Solution";
        return 0;
    }
    if(cnt==2)    dfs(rem1);
    else        dfs(lale);
    while(!ans.empty()){
        cout<<fmaps(ans.front());
        ans.pop();
    }
    return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...