题目:
输入输出:
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int l,n,len;
char ch[45];
int zeroNum,ans;
void Dfs(int k,int zero,int one)
{
if(ans > 1) return;
if(zero > zeroNum) return;
if(one > n) return;
if(k == len)
{
if(zero==zeroNum&&one==n) ans++;
return;
}
int tmpZero=0;
while(ch[k]=='0')
{
++k;
tmpZero++;
}
int oneNum = 1;
for(int j=k;j<len;++j,oneNum=oneNum*2+(ch[j]=='1'))
{
if(oneNum == 2) continue;
if(ch[j+1] == '1') continue;
int i = j+1;
while(ch[i]=='0') ++i;
Dfs(i,zero+tmpZero+i-j-1,one+oneNum);
if(oneNum == 3)
Dfs(i,zero+tmpZero+i-j-1,one+2);
}
}
int main()
{
while(~scanf("%d%d",&l,&n))
{
ans = 0;
scanf("%s",ch);
len = strlen(ch);
zeroNum = l - n;
Dfs(0,0,0);
if(ans == 1)
printf("YES\n");
else
if(ans > 1)
printf("NOT UNIQUE\n");
else
printf("NO\n");
}
return 0;
}