<span style="font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; line-height: inherit; background-color: rgb(250, 250, 250);">当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。</span>
输入格式:
输入第一行给出一个正整数N(<=100),是已知朋友圈的个数;随后N行,每行首先给出一个正整数K(<=1000),为朋友圈中的人数,然后列出一个朋友圈内的所有人——为方便起见,每人对应一个ID号,为5位数字(从00000到99999),ID间以空格分隔;之后给出一个正整数M(<=10000),为待查询的人数;随后一行中列出M个待查询的ID,以空格分隔。
注意:没有朋友的人可以是根本没安装“朋友圈”,也可以是只有自己一个人在朋友圈的人。虽然有个别自恋狂会自己把自己反复加进朋友圈,但题目保证所有K超过1的朋友圈里都至少有2个不同的人。
输出格式:
按输入的顺序输出那些帅到没朋友的人。ID间用1个空格分隔,行的首尾不得有多余空格。如果没有人太帅,则输出“No one is handsome”。
注意:同一个人可以被查询多次,但只输出一次。
输入样例1:3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888
输出样例1:
10000 88888 23333
输入样例2:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
4
55555 44444 22222 11111
输出样例2:
No one is handsome
比赛的时候有点蒙,看了几遍题目没理解题意, 没想到最好的思路,比赛结束后换一种方法就AC了.还是心态不信, 得多练练...
本题一开始可能会想到用vector动态数组去做,但是这样的话最后一个测试点超时.可以用标记数组得思想去解决本题.代码如下:
#include <iostream> #include <cstdio> using namespace std; int id_mark[100010] = {0}; //把ID号作为数组下标 int main() { int N; cin >> N; for(int i = 0; i < N; i++) { int n; cin >> n; for(int j = 0; j < n; j++) { int id; cin >> id; if(n > 1) { //如果朋友圈里面不止一个人,那么标记数组加一 id_mark[id]++; } } } int n, sum = 0; cin >> n; for(int i = 0; i < n; i++) { int ser_id; cin >> ser_id; if(id_mark[ser_id] == 0) { //如果标记数组等于0,证明这个ID要么没有朋友圈或者朋友圈只有他一个人 sum++; if(sum != 1) { printf(" "); } printf("%05d", ser_id); id_mark[ser_id] = 1; //把已经输出的标记数组ID赋值为非0,防止重复输出 } } if(!sum) { printf("No one is handsome\n"); } return 0; }