社区讨论

被安排的不明不白

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

讨论操作

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

当前回复
3 条
当前快照
1 份
快照标识符
@mi6uy1le
此快照首次捕获于
2025/11/20 11:14
4 个月前
此快照最后确认于
2025/11/20 11:14
4 个月前
查看原帖
下的数据弄出来都是对的呀qwq为什么wa完了 这种字符真的烦呀!不知道怎么死的qnq 求大佬们帮忙qaq
CPP
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <queue>
#include <stack>
#define maxn 60
using namespace std;

int n,tot,cnt,ans[maxn<<2],deg[maxn];
bool flag,vis[maxn],edge[maxn][maxn];
stack<int> s;

bool dfs(int x)
{
	s.push(x);
    for(int i=1;i<=52;++i)
    if(edge[x][i])
    	edge[x][i]=edge[i][x]=false,dfs(i);
}

void print()
{
	int sz=s.size();
	while(!s.empty()) ans[s.size()]=s.top(),s.pop();
	for(int i=1;i<=sz;++i)
	{
		char ch;
		if(ans[i]>=1&&ans[i]<=26)ch=ans[i]+'A'-1;
		if(ans[i]>=27&&ans[i]<=52)ch=ans[i]+'a'-27;
		printf("%c",ch);
	}
	puts("");
}

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;++i)
	{
	    int m=2,d[2];char ch[3];
	    scanf("%s",ch);
		while(m--)
		{
			if(ch[m]>='A'&&ch[m]<='Z')d[m]=ch[m]-'A'+1;
			if(ch[m]>='a'&&ch[m]<='z')d[m]=ch[m]-'a'+27;
		}
		edge[d[0]][d[1]]=edge[d[1]][d[0]]=true;
		deg[d[0]]++;deg[d[1]]++;
	}
	for(int i;i<=52;++i)
	    if(deg[i]%2)cnt++;
    if(cnt!=0&&cnt!=2)
	{
		puts("No Solution");
		return 0;
	}
	for(int i=1;i<=52;++i)
    if(deg[i]){dfs(i);break;}
    print();
    return 0;
}

回复

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

正在加载回复...