就是字符串处理题,感觉还没有第二题难呢
我是把每个字符串的在序列中的位置映射下来
在处理
写完总担心超时,幸好没有超时,期待这次rating变紫
代码如下:
#include <bits/stdc++.h>
#define MAXN 100010
using namespace std;
int a[MAXN];
string str1[MAXN], str2[MAXN], str[MAXN*5];
map<string, int> name;
int main(void) {
int n, x, tmp, res, cnt;
scanf("%d", &n);
cnt = 0;
for(int i=0; i<n; i++) {
cin >> str1[i] >> str2[i];
str[cnt++] = str1[i];
str[cnt++] = str2[i];
}
for(int i=0; i<n; ++i) {
scanf("%d", &x);
a[i] = x-1;
}
sort(str, str+cnt);
for(int i=0; i<cnt; ++i) {
name[str[i]] = i;
//cout << str[i] << "---" << i << endl;
}
res = -1;
bool ok = true;
for(int i=0; i<n; ++i) {
tmp = a[i];
//printf("tmp = %d\n", tmp);
int minv = min(name[str1[tmp]], name[str2[tmp]]);
if(name[str1[tmp]] < res && name[str2[tmp]] < res) {
ok = false;
break;
}
else {
if(minv > res)
res = minv;
else res = name[str1[tmp]]+name[str2[tmp]]-minv;
}
//printf("res = %d\n", res);
}
if(!ok) puts("NO");
else puts("YES");
return 0;
}