BZOJ2102 : [Usaco2010 Dec]The Trough Game

暴力枚举答案然后检验。

 

#include<cstdio>
int n,m,i,j,k,a[100],b[100],cnt,ans;char s[20];
int main(){
  for(scanf("%d%d",&n,&m);i<m;i++)for(scanf("%s%d",s,&b[i]),j=0;j<n;j++)if(s[j]=='1')a[i]|=1<<j;
  for(i=0;i<(1<<n);i++){
    for(k=1,j=0;j<m;j++)if(__builtin_popcount(i&a[j])!=b[j]){k=0;break;}
    if(k){cnt++;if(cnt>1)break;ans=i;}
  }
  if(cnt==1)for(i=0;i<n;i++)putchar(48+(ans>>i&1));else puts(cnt?"NOT UNIQUE":"IMPOSSIBLE");
  return 0;
}

  

 

posted @ 2015-02-15 10:20  Claris  阅读(190)  评论(0编辑  收藏  举报