题目
帅 到 没 朋 友
题目链接
题解
模拟类型题目,按题意进行判断操作,其中c++容器能够很好进行数据处理和判断。
map、list、vector、set都可以,以下代码使用的是map
题目要求(即为得分点)
- 例:在告诉你朋友圈的人的时候,每个人的朋友圈中00000朋友只能出现一次,第二次出现的时候不作数
- 当你用数字存储数据的时候要记得输出的时候的输出格式,id是五位数的,所以要用
printf("%05d", x);
- 当题目中的k为1的时候,这时候这个人的朋友圈只有一个人是自恋狂,因为他不满足题目中的k,但是也要用一个cin,将这个多余输入处理了
变量名 | 解释 |
---|---|
bool v[N]; | 用于判断某个数字是否是输出过 |
map<int, int> wechat; | 用于判断朋友圈有几个人,每有一个人就+1 |
bool vis[N]; | 用于判断当前人的朋友圈一个朋友只出现一次 |
bool hprint | 用于判断帅到没朋友的人是否已经出现了 |
fprint | 用于处理输出格式,确保行末没有多余空格 |
代码
const int N = 2e6 + 50;
bool v[N];
map<int, int> wechat;
bool vis[N];
int main(){
memset(v, false, sizeof v);
int n; cin >> n;
rep(i, 1, n) {
int x; cin >> x;
if (x == 1) {int t; cin >> t; continue; }
memset(vis, false, sizeof vis);
rep(j, 1, x) {
int t; cin >> t;
if (!vis[t]) wechat[t]++, vis[t] = true;
}
}
bool hprint = true;
bool fprint = true;
int m; cin >> m;
while(m--){
int inp; cin >> inp;
if (wechat[inp] < 1){
hprint = false;
if (v[inp]) continue;
else v[inp] = true;
if (fprint) { printf("%05d", inp); fprint = false;}
else printf(" %05d", inp);
}
}
if (hprint) printf("No one is handsome");
puts("");
}