codeforces 214C Game

来源:互联网 发布:牛鼻铣刀编程计算 编辑:程序博客网 时间:2024/04/30 15:09

直接暴力就行了。。。

其实关键还是在s=(s+1)%3;res++;这两句上啊T T


http://codeforces.com/problemset/problem/214/C


#include <iostream>#include <stdio.h>#include <string.h>#include <vector>#include <algorithm>#include <queue>#include <math.h>#include <stack>using namespace std;const int INF=1000000;int getInt(){    char ch=getchar();    while(ch<'0'||ch>'9')ch=getchar();    int num=0;    while(ch>='0'&&ch<='9'){        num=num*10+ch-'0';        ch=getchar();    }    return num;}const int maxn=222;int a[maxn];vector<int> v[maxn];int f[maxn];int n,m;int judge(int j){    //cout<<-1<<endl;    for(int i=0; i < v[j].size();i++)        if(f[v[j][i]]==0)          return 0;    //cout<<1<<endl;    return 1;}int main(){    int i,j;    cin>>n;    for(i=1;i<=n;i++)     {         a[i]=getInt();         a[i]--;     }    for(i=1;i<=n;i++)    {        m=getInt();        v[i].resize(m);        for(j=0;j<m;j++)            v[i][j]=getInt();    }    int s,pos,res,vis;    int ans=INF;    for(i=0;i<3;i++)    {        //cout<<k<<endl;        memset(f,0,sizeof(f));        s=i;        pos=0,res=0 ;        //cout<<n<<endl;        while(pos<n)        {            //cout<<pos<<endl;            vis=pos;            for(j=1;j<=n;j++)            {                //cout<<i<<endl;                if(a[j]==s && f[j]==0 && judge(j))                {                    res++;                    pos++;                    f[j]=1;                    //cout<<i<<endl;                }            }            if(vis==pos)            {                s=(s+1)%3;                res++;            }        }        ans=min(ans,res);         //cout<<ans<<endl;    }    cout<<ans<<endl;    return 0;}


0 0
原创粉丝点击