代码长度限制 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!
个人思路
- 主要是先后输出逻辑,另外注意不要看漏要求就可以
#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!";
}
}