0
点赞
收藏
分享

微信扫一扫

CodeForces - 234D Cinema (模拟)

elvinyang 2023-02-03 阅读 39


Description:

Overall there are m actors in Berland. Each actor has a personal identifier — an integer from 1 to m (distinct actors have distinct identifiers). Vasya likes to watch Berland movies with Berland actors, and he has k favorite actors. He watched the movie trailers for the next month and wrote the following information for every movie: the movie title, the number of actors who starred in it, and the identifiers of these actors. Besides, he managed to copy the movie titles and how many actors starred there, but he didn't manage to write down the identifiers of some actors. Vasya looks at his records and wonders which movies may be his favourite, and which ones may not be. Once Vasya learns the exact cast of all movies, his favorite movies will be determined as follows: a movie becomes favorite movie, if no other movie from Vasya's list has more favorite actors.

Help the boy to determine the following for each movie:

  • whether it surely will be his favourite movie;
  • whether it surely won't be his favourite movie;
  • can either be favourite or not.

Input

The first line of the input contains two integers m and k (1 ≤ m ≤ 100, 1 ≤ k ≤ m) — the number of actors in Berland and the number of Vasya's favourite actors.

The second line contains k distinct integers ai (1 ≤ ai ≤ m) — the identifiers of Vasya's favourite actors.

The third line contains a single integer n (1 ≤ n ≤ 100) — the number of movies in Vasya's list.

Then follow n blocks of lines, each block contains a movie's description. The i-th movie's description contains three lines:

  • the first line contains string si (si consists of lowercase English letters and can have the length of from 1 to 10 characters, inclusive) — the movie's title,
  • the second line contains a non-negative integer di (1 ≤ di ≤ m) — the number of actors who starred in this movie,
  • the third line has di integers bi, j (0 ≤ bi, j ≤ m) — the identifiers of the actors who star in this movie. If bi, j = 0, than Vasya doesn't remember the identifier of the j-th actor. It is guaranteed that the list of actors for a movie doesn't contain the same actors.

All movies have distinct names. The numbers on the lines are separated by single spaces.

Output

Print n lines in the output. In the i-th line print:

  • 0, if the i-th movie will surely be the favourite;
  • 1, if the i-th movie won't surely be the favourite;
  • 2, if the i-th movie can either be favourite, or not favourite.

Examples

Input

5 3
1 2 3
6
firstfilm
3
0 0 0
secondfilm
4
0 0 4 5
thirdfilm
1
2
fourthfilm
1
5
fifthfilm
1
4
sixthfilm
2
1 0

Output

2
2
1
1
1
2

Input

5 3
1 3 5
4
jumanji
3
0 0 0
theeagle
5
1 2 3 4 0
matrix
3
2 4 0
sourcecode
2
2 4

Output

2
0
1
1

Note

Note to the second sample:

  • Movie jumanji can theoretically have from 1 to 3 Vasya's favourite actors.
  • Movie theeagle has all three favourite actors, as the actor Vasya failed to remember, can only have identifier 5.
  • Movie matrix can have exactly one favourite actor.
  • Movie sourcecode doesn't have any favourite actors.

Thus, movie theeagle will surely be favourite, movies matrix and sourcecodewon't surely be favourite, and movie jumanji can be either favourite (if it has all three favourite actors), or not favourite.

先确定好k个你嘴喜欢的演员,然后q长电影,没长电影需要的演员数量,和已经确定的演员数名单以及没确定的演员数量,然后输出每个电影能否确定是他最喜欢的 电影。这部电影中有他喜欢的演员数量最多这部电影就是他最喜欢的。能确定是最喜欢的输出0,确定不是最喜欢的输出1,不能确定输出2。

我们只需要把每部电影包含最喜欢演员的最大值和最小值找到然后和其他电影比较就行。如果这部电影有他喜欢演员数量的最小值都大于其他电影喜欢演员数量最大值那么久可以确定这个是他最喜欢的电影。

如果他的最小值小于其他电影的最大值,那么这部电影就是不确定的。

剩下的就是确定为不是最喜欢的

AC代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stdlib.h>
#include<queue>
#include<map>
#include<vector>
#include<math.h>
const int INF = 0x3f3f3f3f;
using namespace std;
typedef long long ll;
typedef double ld;
struct Node
{
int mmin,mmax;
} nod[110];
string str;
int fav[110];
bool vis[110];
int m,k,n;
int c1,c2;
int slove(int x)
{
///先判断一定是,再判断可能是,最后一定不是
bool flag=true;
for(int i=0; i<n; ++i)
{
if(i!=x)
{
if(flag&&nod[x].mmin>=nod[i].mmax)
continue;
else
{
flag=false;
break;
}
}
}
if(flag)
return 0;
flag=1;
for(int i=0; i<n; ++i)
{
if(i!=x)
{
if(flag&&nod[x].mmax>=nod[i].mmin)
continue;
else
{
flag=false;
break;
}
}
}
if(flag)
return 2;
return 1;
}

int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
while(cin>>m>>k)
{
memset(vis,0,sizeof(vis));
for(int i=0; i<k; ++i)
{
cin>>fav[i];
vis[fav[i]]=1;
}
cin>>n;
int t;
c1=k;
c2=m-k;
for(int i=0; i<n; ++i)
{
int t1=c1,t2=c2,t3=0;
cin>>str;
cin>>t;
int tmp;
for(int j=0; j<t; ++j)
{
cin>>tmp;
if(tmp==0)
t3++;///不确定的演员
else if(vis[tmp])
t1--;///剩下的喜欢演员
else
t2--;///剩下的一般演员
}
int t4=c1-t1,t5=t2;
if(t3)
{
t4+=min(t1,t3);///喜爱的演员数目还能增加吗
nod[i].mmin=c1-t1;
nod[i].mmax=t4;
if(t5<t3)
nod[i].mmin+=t3-t5;///由于不喜爱的演员数目不能全部填满,所以最小值改变
}
else
nod[i].mmax=nod[i].mmin=t4;
}
for(int i=0; i<n; ++i)
{
cout<<slove(i)<<endl;
}
}
return 0;
}

 

举报

相关推荐

0 条评论