字典树+map

 

Problem Description
Carryon最近喜欢上了一些奇奇怪怪的字符,字符都是英文小写字母,但奇怪的是a可能比b小,也可能比b大,好奇怪。与此同时,他拿到了好多的字符串,可是看着很不顺眼,因为他们很乱,所以他想将这些字符串按字典序从小到大排下序,这样就好看多了。由于a可能比b小,也可能比b大,这样按常规方法肯定是不行的,幸运的是他破解了26个字母的大小顺序,这样他就开开心心的将字符串从小到大排序了。

Input
第一行输入26个字符的大小顺序

第二行输入一个n(1≤n≤105)。

接下来n行,每行一个字符串si,数据保证每个字符串不重复。(1≤∑i = 1nlen(si)≤3×105)
Output
将n个字符串按字典序从小到大输出。

Sample Input
abcdefghijklmnopqrstuvwxyz
5
bcda
licj
lin
aaaa
aaaaa
Sample Output
aaaa
aaaaa
bcda
licj
lin

#include
#include
#include
#include
#define maxn 1111111
using namespace std;
int pos = 1;
char s[26], str[maxn];
int t[maxn][26];
bool vis[maxn];
mapmm;
void insert(char *s)
{
	int rt = 0, len = strlen(s);
	for (int i = 0; i
#include
#include
#include
#include
#include
#define N 100005
using namespace std;
mapm;
struct node
{
	string s;//s是输入的字符串
	string ss;//ss是映射之后的字符串
}str[N];
bool cmp(node a, node b)
{
	return a.ss> str[i].s;
		int len = str[i].s.length();
		for (int j = 0; j

 

你可能感兴趣的:(STL,字典树)