难过
EC倒数
基本功不扎实
没毅力
STLmap代码更简单,把二分敲一遍
#include <bits/stdc++.h>
using namespace std;
class Name{
public:
char name0[12], name1[12];
};
char In[100];
bool cmp(Name a, Name b) {
if(strcmp(a.name0, b.name0)<0) {
return 1;
}
return 0;
}
Name data[100000 + 4];
int main()
{
int n = 0;
bool cnt = 1; //cnt 选0/1结果不同 ,也就是说n++的位置会影响代码
while (gets(In)) { //我觉得是因为优先级,但是不明白先挖坑
if (In[0] == '\0') break;
if (cnt)
{
sscanf(In, "%s%s", data[n].name1, data[n].name0);
n++;
}
else
{
sscanf(In, "%s%s", data[n].name1, data[n++].name0);
}
// printf("%d %s %s\n", n-1, data[n-1].name0, data[n-1].name1);
}
sort(data, data+n, cmp);
// for (int i = 0; i < n; ++i) {
// printf("%d %s %s\n", i, data[i].name0, data[i].name1);
// }
while (~scanf("%s", In)) {
int l = 0, r = n-1, flag = 1;
while (l<=r) {
int mid = (l+r)/2;
int ans = strcmp(data[mid].name0, In);
if (!ans) {
printf("%s\n", data[mid].name1);
flag = 0;
break;
}
else if (ans>0) r = mid - 1;
else l = mid + 1;
}
if (flag) {
printf("eh\n");
}
}
return 0;
}
对不起