首页 > 代码库 > C++ P1318 Jam的计数法(NOIP2006普及组复赛第3题)
C++ P1318 Jam的计数法(NOIP2006普及组复赛第3题)
#include<iostream>
#include<cstdio>
using namespace std;
int s,t,w,a[30],time=5;
char c[30];
bool ok;//ok表示是否找到规定集合;
void data_in()//使用位向量法;
{
scanf("%d%d%d",&s,&t,&w);
scanf("%s",c);
for(int i=0;i<w;i++)
a[c[i]-96]=1;
}
void DFS(int x,int len)
{
if(x>t)
{
if(len==w)
{
if(!ok){ok=1;return;}
if(time>0)
{
time--;
for(int i=s;i<=t;i++) if(a[i]) printf("%c",i+96);
printf("\n");
}
}
return;
}
for(int i=1;i>=0;i--)if(len<=w)
{
if(ok)
{
a[x]=i;
DFS(x+1,len+i);
}
if(!ok) if(a[x]==i)DFS(x+1,len+i);
if(time==0) return;
}
}
int main()
{
// freopen("test.in","r",stdin);
// freopen("test.out","w",stdout);
data_in();
DFS(s,0);
return 0;
}
C++ P1318 Jam的计数法(NOIP2006普及组复赛第3题)