A29560. 为 i 做 e
填空题
中等
知识点
题目描述
为 i 做 e
题目描述
“为 i 做 e”是最近新出的流行梗。这里的 i 和 e 指 MBTI 人格测试中的不同性格,i 是社恐,e 是外向。“为 i 做 e”就是在一群内向的人中促使自己变成外向(奇奇怪怪无用的知识又增加了)。
给定某次大型活动中的餐桌安排,请你判断一下哪几桌的客人需要“为 i 做 e”了。
输入
输入第一行首先给出正整数 n(≤ 105),随后 n 行,每行给出一个人的代号和其性格,其中代号由 8 位数字组成,性格是单个字母 i 或 e,其间以空格分隔。 接下来是餐桌安排。首先给出正整数 m(≤ 103),为餐桌数量,随后 m 行,每行给出一个正整数 k(≤ 10)以及该桌 k 位客人的代号,用空格分隔。第 i 行对应的是第 i 桌的信息(1 ≤ i ≤ m)。题目保证没有人在餐桌安排中重复出现,且餐桌上每个人的性格都已给出。
输出
如果一桌客人全是 i 人,则意味着有人要“为 i 做 e”了。请在一行中按递增序输出这些桌的桌号。数字间以 1 个空格分隔,行首尾不得有多余空格。如果这样的餐桌不存在,则在一行中输出 None。
样例输入
样例1:
10
00000000 i
12345678 e
23468270 i
78827341 e
67476289 i
35748108 e
99999999 i
40926483 i
88472901 i
55032849 i
3
3 00000000 67476289 99999999
4 12345678 78827341 35748108 55032849
3 23468270 40926483 88472901样例2:
10
00000000 i
12345678 e
23468270 i
78827341 e
67476289 i
35748108 e
99999999 i
40926483 i
88472901 i
55032849 i
2
4 78827341 35748108 55032849 00000000
6 12345678 67476289 99999999 23468270 40926483 88472901样例输出
样例1:
1 3样例2:
None参考答案
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin>>n;
int a[n][2]; //定义二组数组a,存放客人的代号和性格
for(int i=0;i<n;i++){
int x;
char y;
cin>>x>>y;
a[i][0]=x; //每行的第1列存放代号
if(y=='i') a[i][1]=1; //每行的第2列存放性格,输入i,则为1;
else if(y=='e') a[i][1]=0; //每行的第2列存放性格,输入e,则为0;
}
int m;
cin>>m;
int b[m][11]; //定义二组数组b,存放每桌的客人数量及代号
for(int i=0;i<m;i++){
int k;
cin>>k;
b[i][0]=k; //每行的第1列存放客人数量
for(int j=1;j<=k;j++){ //根据客人数量循环存放每个客人的代号
cin>>b[i][j];
}
}
int c[10]={0}; //定义数组c,存放全为i人的桌号
int biao=0; //全为i人的桌数
for(int i=0;i<m;i++){
int k=b[i][0];
int ir=1; //初始每桌客人的性格为i
for(int j=1;j<=k;j++){
int dh=b[i][j]; //获取该桌的每个客人的代号
for(int p=0;p<n;p++){
if(a[p][0]==dh){ //在数组a中查询该客人的代号
ir=a[p][1]; //如果找到,把该客人的性格取出
break;
}
}
if(ir==0){ //如果该桌里面有一个客人的性格为e,该结束循环
break;
}
}
if(ir==1){ //如果该桌客人性格全为i
c[biao]=i+1; //则把该桌号存放数组c中
biao++; //桌数加1
}
}
if(biao==0) cout<<"None"; //最后判断桌数若为0,该表示没有找到满足条件的餐桌
else{ //否则输入性格全为i的桌号
for(int i=0;i<biao;i++){
if(i==0) cout<<c[i];
else cout<<" "<<c[i];
}
}
return 0;
}
上一题
下一题