题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805263964422144
思路:
由于物品编号是4位数字组成的,也就是说物品最多有10000个。可以开一个1000的bool数组p[10000],初始化为false,表示该物品不是违规物品。如果i是违规物品, 那么p[i] = true。设一个bool变量, fa = false,表示某个同学没带违规物品,当发现某个同学的第一件违规物品时,变为true。设置int型r1,r2分别代表有多少人带了违规物品,带了多少件违规物品。
#include <iostream>
#include <cstdio>
using namespace std;
const unsigned int maxn = 10000;
bool p[maxn] = {false};
void solve()
{
int n, m;
scanf("%d%d", &n, &m);
for(int i = 0; i < m; i++)
{
int x;
scanf("%d", &x);
p[x] = true;
}
int r1 = 0, r2 = 0;
while(n--)
{
string s;
int k;
scanf("%s%d", s.c_str(), &k);
bool fa = false;
while(k--)
{
int x;
scanf("%d", &x);
if(p[x])
{
if(!fa)
{
printf("%s: ", s.c_str());
printf("%04d", x);
fa = true;
}
else
printf(" %04d", x);
r2++;
}
}
if(fa)
{
printf("\n");
r1++;
}
}
printf("%d %d\n", r1, r2);
return;
}
int main()
{
solve();
return 0;
}
该题应该属于20分较简单的一类
2018年9月14日 9:27:42