当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。
答案:
//思路在代码下
#include<stdio.h>
void find(int* arr,int num)
{
int before=0,after=99999;
while(before<=after)
{
int tmp=(before+after)/2;
if(tmp>num)
after=tmp-1;
else if(tmp<num)
before=tmp+1;
else
{
arr[tmp]=1;
break;
}
}
}
int main()
{
int i,j,m,n,num,arr[100000]={0},zore=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&m);
if(m==1)
{
scanf("%d",&num);
continue;
}
for(j=0;j<m;j++)
{
scanf("%d",&num);
find(arr,num);
}
}
scanf("%d",&n);
int flag=0;
for(i=0;i<n;i++)
{
scanf("%d",&num);
if(arr[num]==0)
{
arr[num]=1;
if(flag)
printf(" ");
else
flag=1;
printf("%05d",num);
}
}
if(flag==0)
printf("No one is handsome\n");
return 0;
}
思路:
我用的桶的思想,创建个arr[100000]初始化为0,将输入的数看作下标,对应数组位置的值变为1,输出时,输出一个数,也把刚输出的这个数对应数组位置的值变为1,意为下次见到不在输出。
但在arr中找与输入的数相同的下标时,用二分法。