问题
【搜索与回溯算法】生成字符串 (Standard IO)
时间限制: 1000 ms 空间限制: 262144 KB 具体限制
题目描述:
假设一个字符串只由字符”0”、”1”、‘’组成,其中字符‘’表示该字符可由字符”0”或”1”替代。
现有一些字符串,根据这些字符串生成所有可生成的字符串。
注意后一个例子中”*01”并没有生成新的字符串。
输入
第一行是两个整数M,N(1≤M≤15,0≤N≤2500)。M表示字符串的长度,N表示字符串的个数。
以下N行每行各有一个字符串。各行的行首、行末没有多余的空格。
输出
一行,为一个整数,Total表示所能生成的字符串的个数。
样例输入
2 3
10
1
0
样例输出
4
代码:
#include<bits/stdc++.h>
using namespace std;
string a[2505];
int n,m,t,len,flag;
bool visit[900000005];
void dg(int x,int i)
{
if(x>len)
{
long long qn=atol(a[i].c_str());
if(visit[qn]==0)
{
t++;
visit[qn]=1;
cout<<1;
}
}
else
{
if(a[i][x]=='*')
{
a[i][x]='1';
dg(x+1,i);
a[i][x]='0';
dg(x+1,i);
a[i][x]='*';
}
else dg(x+1,i);
}
}
int main()
{
cin>>m>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
len=a[i].size();
dg(0,i);
}
cout<<t;
}