比赛 |
2011.3.17 |
评测结果 |
AAAAWWWWWW |
题目名称 |
奶牛议会 |
最终得分 |
40 |
用户昵称 |
Pom |
运行时间 |
0.000 s |
代码语言 |
C++ |
内存使用 |
0.00 MiB |
提交时间 |
2011-03-17 11:37:02 |
显示代码纯文本
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const int MAXM=4001;
struct cow
{
int f1,f2,c1,c2;
}C[MAXM];
int n,m,i,j,k,re[20],ans[20];
char ch;
bool b[MAXM];
void pd()
{
memset(b,false,sizeof(b));
int tot=0;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (re[i]==C[j].c1 && i==C[j].f1 || re[i]==C[j].c2 && i==C[j].f2)
if (!b[j])
{
b[j]=true;
++tot;
}
if (tot!=m) return;
for (i=1;i<=n;i++)
{
if (ans[i]==-1) ans[i]=re[i];
else if (ans[i]!=re[i]) ans[i]=2;
}
}
void dfs(int dep)
{
if (dep>n)
{
pd();
return;
}
re[dep]=0;
dfs(dep+1);
re[dep]=1;
dfs(dep+1);
}
int main()
{
freopen("cowngress.in","r",stdin);
freopen("cowngress.out","w",stdout);
scanf("%d%d",&n,&m);
if (n>15)
{
printf("IMPOSSIBLE\n");
return 0;
}
for (i=1;i<=n;i++)
ans[i]=-1;
for (i=1;i<=m;i++)
{
scanf("%d%c%c",&j,&ch,&ch);
C[i].f1=j;
if (ch=='N') C[i].c1=0;
else C[i].c1=1;
scanf("%d%c%c",&j,&ch,&ch);
C[i].f2=j;
if (ch=='N') C[i].c2=0;
else C[i].c2=1;
}
dfs(1);
for (i=1;i<=n;i++)
{
if (ans[i]==2 || ans[i]==-1) printf("?");
if (ans[i]==1) printf("Y");
if (ans[i]==0) printf("N");
}
printf("\n");
return 0;
}