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<iostream>
#include<cstdio>
using namespace std;
int a[100010];
int main()
{
int n,x;
cin>>n;
for(int i=0;i<n;i++)
{
int k;
cin>>k;
for(int j=0;j<k;j++)
{
cin>>x;
if(k>1) //如果不是隻有自己
{
a[x]++;
}
}
}
int m,flag=0;
cin>>m;
for(int i=0;i<m;i++)
{
cin>>x;
if(a[x]==0)
{
a[x]=1; //不輸出重複的
if(flag==0)
{
printf("%05d",x); //是一個五位數,輸入的時候可能有前導零,所以輸出的時候補齊前導零
}
else
{
printf(" %05d",x);
}
flag=1;
}
}
if(flag==0)
cout<<"No one is handsome"<<endl;
else
printf("\n");
return 0;
}
原題鏈接:
https://pintia.cn/problem-sets/994805046380707840/problems/994805117167976448
小記錄:
(不用在意這些)
/*這個是錯誤的,上面的那個是正確的。*/
/**
前兩個樣例是對的,後面三個是錯的。
後來我發現我讀錯題了。
開始我理解的是,輸入n組,每組k個元素,然後再輸m個元素,
輸出m個元素中和n*k不同的元素
後來看了別人的才知道理解錯了,不能光看樣例不好好讀題。
(因爲我覺得我的思路我覺得很好,所以我將這個代碼保留了下來。紀念一下我當時的思路。)
*/
#include<bits/stdc++.h>
using namespace std;
int a[1010];
int b[10010];
int c[100010];
int d[10010];
int main()
{
int n;
cin>>n;
int x=0;
for(int i=0;i<n;i++)
{
int k;
cin>>k;
for(int j=0;j<k;j++)
{
cin>>a[j];
c[x++]=a[j]; //所有的數字拿數組c存起來
}
}
int m;
cin>>m;
for(int i=0;i<m;i++)
{
cin>>b[i];
}
sort(c,c+x); //數組c中的元素排序
int y=unique(c,c+x)-c; //數組c中的元素去重
int z=0;
for(int i=0;i<m;i++) //然後和b中的比較,如果相同就把b中的元素改爲1,並且z計數器記錄了有幾個相同元素
{
for(int j=0;j<y;j++)
{
if(b[i]==c[j])
{
b[i]=0;
z++;
break;
}
}
}
//去掉b中的重複元素
int w=0;
int q;
for(int i=0;i<m;i++)
{
for(q=0;q<w;q++)
{
if(b[i]==d[q])
{
break;
}
}
if(q==w)
{
d[w]=b[i];
w++;
}
}
if(z==m)
{
cout<<"No one is handsome"<<endl;
}
else
{
for(int i=0;i<w;i++)
{
if(d[i]!=0) //輸出d中不爲0的數字(最後一位可能是0)
{
if(i!=w-1) //由於是個五位數,輸出時記得前面補前導零
{
printf("%05d ",d[i]);
}
else
printf("%05d\n",d[i]);
}
}
}
return 0;
}