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; }