问题 N: 找朋友

问题 N: 找朋友

时间限制: 1 Sec  内存限制: 128 MB
提交 状态

题目描述

小学毕业后,同学们都进入了不同的初中,小明非常想念小伙伴们,所以他打算联系小学的同学们。
现在他得到了市内某所初中的所有名单,找出其中小明的小伙伴们。
 

输入

第一行一个整数n,表示某初中人数。
接下来n行,每行一个字符串,只有小写字母组成,表示该校每个人的拼音。数据保证没有人拼音相同,且已经按照字典序从小到大排序。
第n+2行有一个整数m,表示小明的小伙伴个数。
最后m行,每行一个字符串,只有小写字母组成,表示每个小伙伴的拼音,同样保证没有重复。
 

输出

输出所有在该校的小伙伴的拼音。
每行一个拼音,顺序按照小伙伴给出的顺序。
 

样例输入 Copy

3
alice
bob
zhangsan
2
lisi
zhangsan

样例输出 Copy

zhangsan

提示

对于70%的数据,n≤1000,m≤100
对于100%的数据,n<=100000,m<=10000,每个人拼音长度不超过15。
所有数据,学校学生名单中的姓名,都是按照字典序从小到大排序。
 
 
 1 #include<bits/stdc++.h>
 2 #include<string.h>
 3 using namespace std;
 4 char a[100000][20],b[10000][20];
 5 int main()
 6 {
 7     
 8     int i,j,k,m,n,low,high,mid;
 9     scanf("%d",&n);
10     for(i=0;i<n;i++)
11         scanf("%s",a[i]);
12     scanf("%d",&m);
13     for(i=0;i<m;i++)
14         scanf("%s",b[i]);
15     for(i=0;i<m;i++)
16     {    
17     
18         low=0;
19         high=m-1;
20         while(low<=high)
21         {
22             mid=(low+high)/2;
23             if(strcmp(a[i],b[mid])==0) 
24             {
25                 printf("%s\n",a[i]);
26                 break;
27             }
28             if(strcmp(a[i],b[mid])>0)    low=mid+1;
29             if(strcmp(a[i],b[mid])<0)    high=mid-1;
30             
31         }
32     
33     }    
34     return 0;
35     }
36     

 

 
posted @ 2020-11-12 23:15  瑜瑜子  阅读(314)  评论(0)    收藏  举报