索隆是有名的路痴,为了不让索隆走丢,娜美给了索隆一本地图。该地图有 N 个城市,
编号从 1 到 N。 每个城市有个代号, 索隆每到一个城市只能知道该城市的代号而不知道该城
市的编号,现有一份编号与代号对应的清单,你能帮索隆尽快地找到所在城市的编号吗?
★数据输入
输入第一行为两个正整数N (1< =N < =1000000),M(1<=M<=10000) 表示有 N 个城
市,M 个询问
接下来N 行,每行一个整数 ai(0<=ai<=100000000),第i 行表示编号 i 的城市的代号
为ai。这N 个整数各不相同。
接下来一行为一个正整数M (1<=M < =10000) ,表示有 M 个询问。
接下来M 行,每行一个整数 b(0<=b<=100000000),表示当前所在城市的代号。
★数据输出
对于每个询问,输出一行一个整数,当前所在城市的编号,数据保证有解。
输入示例 输出示例
6 3 1
4 2
5 5
7
10
8
2
4
5
8
#include <stdio.h>
#include <stdlib.h>
struct City
{
int code;
int n;
City *next;
};
int main(void)
{
int N, M, mode, i = 0;
scanf("%d%d", &N, &M);
int Num, t;
mode = 65500;
City **list = (City **)malloc(mode*sizeof(City *));
City **list_temp = (City **)malloc(mode*sizeof(City *));
for (i = 0; i<mode; i++)
list[i] = list_temp[i] = NULL;
for (i = 1; i <= N; i++)
{
scanf("%d", &Num);
t = Num%mode;
if (list[t] != NULL)
{
list_temp[t]->next = (City *)malloc(sizeof(City));
list_temp[t]->next->code = Num;
list_temp[t]->next->n = i;
list_temp[t]->next->next = NULL;
list_temp[t] = list_temp[t]->next;
}
else
{
list[t] = (City *)malloc(sizeof(City));
list[t]->code = Num;
list[t]->n = i;
list[t]->next = NULL;
list_temp[t] = list[t];
}
}
City *cur;
for (i = 0; i<M; i++)
{
scanf("%d", &Num);
cur = list[Num%mode];
while (cur != NULL)
{
if (cur->code == Num)
{
printf("%d\n", cur->n);
break;
}
cur = cur->next;
}
}
return 0;
}