题目描述
给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。
输入输出格式
输入格式:
第一行输入一个正整数n。
以下n行每行两个字母,表示这两个字母需要相邻。
输出格式:
输出满足要求的字符串。
如果没有满足要求的字符串,请输出“No Solution”。
如果有多种方案,请输出前面的字母的ASCII编码尽可能小的(字典序最小)的方案
输入输出样例
说明
【数据规模与约定】
不同的无序字母对个数有限,n的规模可以通过计算得到。
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define inf 2147483647 const ll INF = 0x3f3f3f3f3f3f3f3fll; #define ri register int template <class T> inline T min(T a, T b, T c) { return min(min(a, b), c); } template <class T> inline T max(T a, T b, T c) { return max(max(a, b), c); } template <class T> inline T min(T a, T b, T c, T d) { return min(min(a, b), min(c, d)); } template <class T> inline T max(T a, T b, T c, T d) { return max(max(a, b), max(c, d)); } #define scanf1(x) scanf("%d", &x) #define scanf2(x, y) scanf("%d%d", &x, &y) #define scanf3(x, y, z) scanf("%d%d%d", &x, &y, &z) #define scanf4(x, y, z, X) scanf("%d%d%d%d", &x, &y, &z, &X) #define pi acos(-1) #define me(x, y) memset(x, y, sizeof(x)); #define For(i, a, b) for (int i = a; i <= b; i++) #define FFor(i, a, b) for (int i = a; i >= b; i--) #define bug printf("*********** "); #define pb push_back const int N = 505; const int mod=100003; // name******************************* int du[N]; int G[N][N]; stack<int>S; int n; int s; char str[10]; // function****************************** void dfs(int x) { For(i,1,52) { if(G[x][i]) { G[x][i]--; G[i][x]--; dfs(i); } } S.push(x); } //*************************************** int main() { // ios::sync_with_stdio(0); // cin.tie(0); // freopen("test.txt", "r", stdin); // freopen("outout.txt","w",stdout); cin>>n; For(i,1,n) { int a,b; scanf("%s",str); if(str[0]<='Z')a=str[0]-'A'+1; else a=str[0]-'a'+27; if(str[1]<='Z')b=str[1]-'A'+1; else b=str[1]-'a'+27; G[a][b]++; G[b][a]++; du[a]++; du[b]++; s=min(a,b); } int cnt=0; FFor(i,52,1) { if(du[i]&&du[i]%2) { s=i; cnt++; } if(cnt>2) { cout<<"No Solution"; return 0; } } dfs(s); while(!S.empty()) { int x=S.top(); if(x<=26)cout<<char('A'+x-1); else cout<<char('a'+x-27); S.pop(); } return 0; }