时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

一般我们在对字符串排序时,都会按照字典序排序。当字符串只包含小写字母时,相当于按字母表"abcdefghijklmnopqrstuvwxyz"的顺序排序。  

现在我们打乱字母表的顺序,得到一个26个字母的新顺序。例如"bdceafghijklmnopqrstuvwxyz"代表'b'排在'd'前,'d'在'c'前,'c'在'e'前……  

给定N个字符串,请你按照新的字母顺序对它们排序。  

输入

第一行包含一个整数N。(1 <= N <= 1000)

第二行包含26个字母,代表新的顺序。

以下N行每行一个字符串S。 (|S| <= 100)

输出

按新的顺序输出N个字符串,每个字符串一行。

样例输入
5
bdceafghijklmnopqrstuvwxyz
abcde
adc
cda
cad
ddc
样例输出
ddc
cda
cad
abcde
adc
 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <algorithm>
 5 
 6 using namespace std;
 7 
 8 int ord[26];
 9 
10 struct Node{
11     string str;
12     bool operator<(Node x) const{
13         int len1 = str.length();
14         int len2 = x.str.length();
15         for(int i = 0; i < len1 && i < len2; i++){
16             if(str[i] == x.str[i])continue;
17             return ord[str[i]-'a'] < ord[x.str[i]-'a'];
18         }
19         if(len1 < len2)return true;
20         else return false;
21     }
22 }node[1010];
23 
24 int main()
25 {
26     int n;
27     string str;
28     while(cin>>n){
29         cin>>str;
30         for(int i = 0; i < 26; i++){
31             ord[str[i]-'a'] = i;
32         }
33         for(int i = 0; i < n; i++){
34             cin>>node[i].str;
35         }
36         sort(node, node+n);
37         for(int i = 0; i < n; i++)
38               cout<<node[i].str<<endl;
39     }
40 
41     return 0;
42 }
View Code

相关文章: