朱老师很生气 (20 分)

代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB

题目描述

班主任朱老师喜欢在微信群中发布通知,让家长们接龙。某天朱老师发布了一则通知,“清明节放假三天,收到请回复”,于是家长们开始接龙:
在这里插入图片描述
但某个家长接龙时突然手滑了一下,回复成:“收到,猪老师”,于是后面的家长进行复制粘贴,也回复了“收到,猪老师",接龙变成了这样:
在这里插入图片描述
突然某个家长发现接错了,于是重新进行了接龙(当然,已经接错的是无法删除的),接龙终于又正常了:
在这里插入图片描述
结果很明显,当朱老师统计接龙信息时,他很生气!

输入格式

第一行给出家长人数N(N<=100000)于是给家长编号为1~N,接下来若干行给出家长的接龙信息,每行表示一条接龙信息,格式为:收到,朱老师 家长编号,家长编号前有一个空格,接龙的最后一行为#,表示接龙结束,题目假设第一条接龙信息总是正确的。

输出格式

在第一行中输出首个接错龙的家长编号;第二行按升序输出接错龙的家长编号,编号间用一个空格分隔,最后一个编号后面无空格,注意改正错误的家长不能被统计在里面;第三行按升序输出未接龙家长的编号,编号间用一个空格分隔,最后一个编号后面无空格。若没有家长接龙,输出"no one!“;若没有家长接错龙,第二行输出"all right!”,若所有家长都参与了接龙,第三行输出"everyone is here!"

输入样例

8
收到,朱老师 2
收到,朱老师 3
收到,猪老师 1
收到,猪老师 7
收到,猪老师 6
收到,朱老师 1
.#

18
.#

输出样例

1
6 7
4 5 8

no one!

个人思路
  1. 主要是先后输出逻辑,另外注意不要看漏要求就可以
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int p[n];
    for(int i=1;i<=n;i++)
    {
        p[i-1]=i;
    }
    string ans="收到,朱老师";
    string str;
    cin>>str;
    if(str=="#")
    {
        cout<<"no one!";
        return 0;
    }
    bool first=true;
    while(str!="#")
    {
        int a;
        cin>>a;
        if(str!=ans)
        {
            if(first)
            {
                cout<<a<<endl;
                p[a-1]=0;
                first=false;
            }
            p[a-1]=0;
        }
        else if(str==ans)
        {
            p[a-1]=-1;
        }
        str.clear();
        cin>>str;
    }
    first=true;
    for(int i=0;i<n;i++)
    {
        if(p[i]==0)
        {
            if(!first)
            {
                cout<<" "<<i+1;
            }
            else
            {
                cout<<i+1;
                first=false;
            }
        }
    }
    if(first)
    {
        cout<<"all right!"<<endl;
    }
    else
    {
        cout<<endl;
    }
    
    first=true;
    int flag=0;
    for(int i=0;i<n;i++)
    {
        if(p[i]!=-1&&p[i]!=0)
        {
            if(first)
            {
                cout<<p[i];
                first=false;
            }
            else
            {
                cout<<" "<<p[i];
            }
        }
        else
        {
            flag++;
        }
    }
    if(flag==n)
    {
        cout<<"everyone is here!";
    }
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值