L1-020 帅到没朋友

题意解析:给出朋友圈的个数,每个朋友圈的人数,以及查询的次数,输出查询中是帅到没朋友的人的ID(这里ID用字符串或整型数字存储均可,不过字符串不需要填补前缀0),所谓帅到没朋友的人,即未在1人以上(需要注意,如果一个朋友圈只有一个人,那么也不能算是有朋友)朋友圈中出现过的人,同一个人可能存在于多个朋友圈中,并且,查询过程中可能存在重复的查询内容,但是重复的查询内容只输出一次,这里需要去重操作。

基于这道题的特性,使用set来进行处理会比较简便,我们可以将所有人数大于1的朋友圈视作一个整体,遍历插入到一个set类型变量中,基于set的去重性质,即使一个人混迹于多个朋友圈,我们也只会记录一次,而最终的查询过程,我们可以再创建一个set类型变量来记录是否输出过了,每找到一个没有朋友的人,输出的同时插入到该变量中,下次遇到没有朋友的人,先在变量中查找是否存在(即检验是否输出过,避免重复输出),这样完成查询过程即可

Code:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n, m, x;//n是朋友圈的个数  m是每个朋友圈中人的数量 x是查询的次数
    string ch;//字符串变量,用于字符串输入
    cin >> n;
    set<string> s; // 定义set类型变量(set的作用在于去重,重复插入时不会插入进去)
    //这里s1是用来记录出现在多人朋友圈里的人,这些人不是帅到没有朋友的人
    //后续我们只需要判断查询的人有没有在s里,就能知道他是不是帅到没朋友的人了
    while(n -- ){//进行朋友圈的遍历
        cin >> m;
        if(m == 1) {//注意,如果朋友圈中只有一个人时,这个人并不算有朋友,此时跳过即可
            cin >> ch;
            continue;
        }
        while(m -- ){//m大于1时刻,至少有两个不同的人,可以保证这些都会是有朋友的人
            cin >> ch;
            s.insert(ch);
        }
    }
    cin >> x;
    set<string> s2;//s2用来记录输出过的帅到没朋友的人,因为查询可能存在重复的数据,但只要求输出一次,所以用这种方式进行筛查,避免重复输出
    while(x -- ){
        cin >> ch;
        if(s.find(ch) == s.end()){//如果这个人没有朋友
            if(s2.find(ch) != s2.end()) continue;//判断这个人有没有输出过
            if(s2.size() == 0) cout << ch;//因为格式要求,所以需要特判第一个输出的数据
            else cout << ' ' << ch;
            s2.insert(ch);//输出过的数据插入到s2中,避免重复输出
        }
    }
    if(s2.size() == 0) cout << "No one is handsome";//如果一个都没有输出,那么表示没有帅到没朋友的人,直接输出题目要求内容即可
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值