PTA:L1-020 帅到没朋友

【题目来源】
https://pintia.cn/problem-sets/994805046380707840/exam/problems/994805117167976448?type=7&page=0

【题目描述】
当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。

【输入格式】
输入第一行给出一个正整数 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


【算法分析】
● 没有朋友的人可以是根本没安装“朋友圈”,也可以是只有自己一个人在朋友圈的人。
大白话就是说,在列出的 M 个待查询的 ID 中,若在 N 行输入中没有出现,或单独出现在某行输入中,就是帅到没朋友的 ID。

● 题目保证所有 K 超过 1 的朋友圈里都至少有 2 个不同的人。
大白话就是说,ID 数量大于等于 2 的朋友圈中的 ID,除非是在 N 行输入中没有出现的,否则都不是所求。
● ID 号,为 5 位有前导 0 的数字(从 00000 到 99999)。所以需要用到如下语法,否则会报错。

%5d:右对齐;不足5位左补空格、大于5位按实际输出。 
%05d:右对齐;不足5位左补0、大于5位按实际输出。

printf("%5d",1);   //输出:****1(*为空格)
printf("%05d",1);  //输出:00001


【算法代码一】

#include <bits/stdc++.h>
using namespace std;

const int maxn=1e5+5;
int st[maxn];
int n,k,id;
int m;
int flag=0;

int main() {
    memset(st,0,sizeof(st));

    scanf("%d",&n);
    while(n--) {
        scanf("%d",&k);
        for(int i=1; i<=k; i++) {
            scanf("%d",&id);
            if(k==1) break;
            st[id]=1;
        }
    }

    scanf("%d",&m);
    while(m--) {
        scanf("%d",&id);
        if(!st[id]) {
            if(flag==0) {
                printf("%05d",id);
                flag=1;
            } else printf(" %05d",id);
            st[id]=1;
        }
    }
    if(flag==0) printf("No one is handsome");

    return 0;
}

/*
in1:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888

out1:
10000 88888 23333

-----------------------------------------------

in2:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
4
55555 44444 22222 11111

out2:
No one is handsome

-----------------------------------------------
in3:
2
1 11111
3 11111 33333 66666
2
11111 77777

out3:
77777
*/


【算法代码二】

#include <bits/stdc++.h>
using namespace std;

const int maxn=1e5+5;
int st[maxn];

int main() {
    int n,id,k;
    scanf("%d",&n);
    while(n--) {
        scanf("%d",&k);
        for(int i=1; i<=k; i++) {
            scanf("%d",&id);
            if(k!=1) st[id]++;
        }
    }

    int m,cnt=0;
    scanf("%d",&m);
    for(int i=1; i<=m; i++) {
        scanf("%d",&id);
        if(st[id]==0) {
            if(cnt==0) printf("%05d",id);
            else printf(" %05d",id);
            cnt++;
            st[id]=-1;
        }
    }
    if(cnt==0) printf("No one is handsome");

    return 0;
}

/*
in1:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
8
55555 44444 10000 88888 22222 11111 23333 88888

out1:
10000 88888 23333

-----------------------------------------------

in2:
3
3 11111 22222 55555
2 33333 44444
4 55555 66666 99999 77777
4
55555 44444 22222 11111

out2:
No one is handsome

-----------------------------------------------
in3:
2
1 11111
3 11111 33333 66666
2
11111 77777

out3:
77777
*/






【参考文献】
https://blog.csdn.net/weixin_42861049/article/details/104656584
https://blog.csdn.net/zss6666yi/article/details/132844872
https://blog.csdn.net/qq_36734025/article/details/79627561
https://www.cnblogs.com/marswithme/p/16168393.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值