https://hihocoder.com/problemset/problem/1712
感觉解法呼之欲出,却出不来。。
一个很好的思路是,根据新的顺序表,把给定的n组字符串换成旧表对应的字符,然后用strcmp
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
#define IO ios::sync_with_stdio(false);cin.tie(0);
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n;
char str[];
map<char, int> mp;
typedef struct{
char s1[];
char s2[];
}Node;
Node node[];
bool cmp(const Node a, const Node b)
{
return strcmp(a.s2, b.s2)<;
}
int main()
{
cin >> n;
cin >> str;
for(int i = ; i < n; i++){
cin >> node[i].s1;
}
for(int i = ; i < ; i++){
mp[str[i]] = i;
}
for(int i = ; i < n; i++){
for(int j = ; j < strlen(node[i].s1); j++){
node[i].s2[j] = mp[node[i].s1[j]]+'a';
}
}
sort(node, node+n, cmp);
for(int i = ; i < n; i++){
cout << node[i].s1 << endl;
}
return ;
}