时间限制: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 }