Jam的计数法-rqnoj-3

说起这道题就是眼泪汪汪的,一开始把题看错了,以为就是求过后的五个数,没有注意到这个数里的字母本身是严格单调递增的。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;

char ee[]="aabcdefghijklmnopqrstuvwxyz";

int cnt=0;
int s,t,w;
int a[30];
char q[30];

void init()
{
	freopen("count.in","r",stdin);
	freopen("count.out","w",stdout);
}

void readdata()
{
	scanf("%d%d%d%s",&s,&t,&w,q);
	int j=1;
	for(int i=0;i<w;i++)
	{
		a[j++]=q[i]-'a'+1;
	}
	/*for(int i=1;i<=w;i++) printf("%d",a[i]);
	printf("\n");*/
}

void print()
{
	cnt++;
	for(int i=1;i<=w;i++)
		printf("%c",ee[a[i]]);
	printf("\n");
	if(cnt==5) exit(0);
}

void work()
{
    for(int k=1;k<=w;k++)
    {
    	for(int j=w;j>0;j--)
    	{
    		if(j==w)
    		{
    			while( (a[j]+1)<=t )
    			{
    				a[j]++;
    				print();
    			}
    		}
    		else
    		{
                	if( (a[j]+w-j+1)<=t )
                	{
    			    	a[j]++;
                    		for(int i=j+1;i<=w;i++)
                    		{
                        		a[i]=a[i-1]+1;
                    		}
                    		print();
				break;
                	}
    		}
    	}
    }
}

int main()
{
	//init();
	readdata();
	work();
	return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值