模拟-CodeForces 370B

来源:互联网 发布:c# vsa javascript 编辑:程序博客网 时间:2024/05/21 09:18

题意:

给出玩的人数。

下面每个人有N 张牌, 1-...n牌的数字

判断是1->人数       这个人是否能赢:

获胜条件,在最优情况下,他是第一也是唯一出完所有牌的人

思路:

数据不大,模拟,每次报出当前要输出这个人的所有牌,再从所有人中搜索这张牌,加以标记,如果除他外有人的牌,都存在标记则NO

#include <iostream>#include <cstring>#include <string>#include <vector>#include <queue>#include <cstdio>#include <map>#include <cmath>#include <algorithm>#define INF 0x3f3f3f3f#define MAXN 100010using namespace std;int a[105][105];int cot[105];int visit[105][105];int n;int num[105];int solve(int x,int tp){    for(int i=1;i<=n;i++)    {        if(i==tp)            continue;        for(int j=1;j<=num[i];j++)        {            if(a[i][j]==x)            {                visit[i][j]=1;                int k;                for( k=1;k<=num[i];k++)                {                    if(visit[i][k]!=1)                    {                        break;                    }                }                if(k==num[i]+1)                {                    return 0;                }            }        }    }  return 1;}int main(){    cin>>n;    for(int i=1;i<=n;i++)    {        cin>>num[i];        for(int j=1;j<=num[i];j++)            {                int t;                cin>>t;                a[i][j]=t;                cot[t]++;            }    }    for(int i=1;i<=n;i++)    {   int j;        memset(visit,0,sizeof(visit));        for( j=1;j<=num[i];j++)        {            if(cot[a[i][j]]!=1)            {                if(solve(a[i][j],i)==0)                {                    break;                }            }        }        if(j==1+num[i])        {            printf("YES\n");        }        else            printf("NO\n");    }}/*34 1 2 3 43 1 2 33 1 2 4*/


0 0
原创粉丝点击