L1-020. 帅到没朋友
当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。
输入格式:
输入第一行给出一个正整数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
//自己的方法,代码正确,但超时了,借鉴了一下其他人的,自己之前没想到......
//法一:(运行超时)
//法二:#include <stdio.h> #include <stdlib.h> #include<string.h> int getresult(char **data,int time,char *judge) { for(int i=0;i<time;i++){ if(strstr(data[i],judge)!=NULL&&strlen(data[i])>6){ return 0; } } return 1; } int ifcommon(char (*judge)[6],char *p,int former) { for(int i=0;i<=former-1;i++) if(strcmp(judge[i],p)==0) return 0; return 1; } int main() { int time; scanf("%d",&time); char **data; data=(char **)malloc(sizeof(char *)*time); int num[100]; for(int i=0;i<time;i++){ scanf("%d",&num[i]); data[i]=(char *)malloc(sizeof(char)*num[i]*6+1); gets(data[i]); //puts(data[i]); } int count; scanf("%d",&count); getchar(); char (*judge)[6]; judge=(char (*)[6])malloc(sizeof(char [6])*count); int flag=0; for(int j=0;j<count;j++){ scanf("%s",judge[j]); int result=getresult(data,time,judge[j])&&ifcommon(judge,judge[j],j); if(result){ if(flag==0){ printf("%s",judge[j]); flag=1; } else printf(" %s",judge[j]); } } if(flag==0) puts("No one is handsome"); return 0; }
//用“桶容器”存数据
//只要某个朋友圈里不是一个人,则圈内人都不帅
#include <stdio.h> #include <stdlib.h> #include<string.h> int data[1000000]; int main() { memset(data,0,sizeof(int)); int time1,time2; int num; scanf("%d",&time1); for(int i=1;i<=time1;i++){ scanf("%d",&time2); if(time2!=1){//只要某个朋友圈里不是一个人,则圈内人都不帅 for(int j=1;j<=time2;j++){ scanf("%d",&num); data[num]=1; } } else scanf("%d",&num); } int n; scanf("%d",&n); int flag=0; for(int i=1;i<=n;i++){ scanf("%d",&num); if(data[num]==0){ if(flag==0) printf("%05d",num);//用0填充 else printf(" %05d",num); flag=1; data[num]=1; } } if(flag==0) printf("No one is handsome\n"); return 0; }