主要思路就是:
利用数组做标记,先输入ID以后,只要不是朋友圈只有自己一个人的(特殊值,只有自己一个人在朋友圈的人),就把相应的数组那个位置标志为-1,然后验证的时候,访问那个ID的数组,如果还是初始值0的话,就说明先前没有被标记过,也就是我们要找的那些数,然后就输出就好了,其中空格的位置利用了一个小技巧。
输入样例1:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888
#include<iostream>
using namespace std;
int main()
{
int a[99999]={0};//开辟数组a用来为ID标记,初始标记为0。(之所以开到99999是取到了ID的最大值)
int N;
cin>>N;
int K;
int ID;
for(int i=0;i<N;i++)
{
cin>>K;
for(int j=0;j<K;j++)
{//遍历-输入每个朋友圈的ID
cin>>ID;
if(K!=1)//如果 K==1,那就是只有自己一个人在朋友圈的人(帅到没朋友的特殊值)
{//如果朋友圈人数>1,把每一个ID对应的数组位置标记为-1
a[ID]=-1;
}
}
}
int M;
int sum=0;//sum用来控制空格的输出(小技巧)
cin>>M;
for(int i=0;i<M;i++)
{//遍历-输入
cin>>ID;
if(a[ID]==0)
{//这些人都帅到没朋友
if(sum!=0)
{
cout<<" ";
}
printf("%05d",ID);
a[ID]=-1;
sum++;
}
}
if(sum==0)
{//这些人都不够帅(这些人的标记都为-1)
cout<<"No one is handsome"<<endl;
}
return 0;
}