大致题意:给你 n n n个各不相同的无序字母对(注意:两个字母可能相同,被这个坑了好几次),请构造一个长度为 n + 1 n+1 n+1的字符串包含每个字母对。
欧拉回路
这是一道裸的欧拉回路,只不过是字符串版的,步骤较经典版略显麻烦。
L i n k Link Link
欧拉回路详见博客欧拉路与欧拉回路
依照欧拉回路的思路,我们先统计出每个字母出现的次数。然后对其中奇点的个数分类讨论:
若没有奇点:则可以从任意一个点开始遍历。由于题目中要求字典序最小,所以从字典序最小的点开始遍历。
若有两个奇点:则可以从任意一个奇点开始遍历。由于题目中要求字典序最小,所以从字典序较小的奇点开始遍历。
若以上两种情况皆不满足:说明无解,输出“No Solution”。
代码
#include<bits/stdc++.h>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define LL long long
#