算法训练 JAM计数法 生成组合+模拟

http://lx.lanqiao.cn/problem.page?gpid=T94

题意:给出s,t,w<=26 string由s,t组成的w位递增字符,给出string 求出它之后的5个递增排列
最大字符为t,生成下一个排列,模拟t进制+1即可,因为排列要严格递增 第j个字符最大为‘a‘+t -(w-j) 第j个字符+1后,生成b[j]开头的最小递增字典序,从该位至末位字母递增,公差为1

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e3+20;
int s,t,w;
char a[N],b[N];
void solve()
{
	strcpy(b,a);
	int j,i=w,count=0;
	while(--i>=0)
	{
		j=i;
		while(b[j]+1 <= ‘a‘+t-(w-j))//第j个字符的最大值
		{
			b[j]+=1;
			while(++j<w)
			{
				b[j]=b[j-1]+1;//后面+1,该递增字典序最小.
			}
			count++;
			printf("%s\n",b);
			if(count==5)
			return;

			j=w-1;//递增后,每次最后一位+1
		}
		i=j;
	}
}
int main()
{
	while(cin>>s>>t>>w)
	{
		scanf("%s",a);
		solve();
	}
	return 0;
}

  

时间: 2024-10-12 02:55:12

算法训练 JAM计数法 生成组合+模拟的相关文章

JAM计数法

问题描述 Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文字母按原先的顺序,排在前面的字母小于排在它后面的字母.我们把这样的"数字"称为Jam数字.在Jam数字中,每个字母互不相同,而且从左到右是严格递增的.每次,Jam还指定使用字母的范围,例如,从2到10,表示只能使用{b,c,d,e,f,g,h,i,j}这些字母.如果再规定位数为5,那么,紧接

【NOIP2006】第三题&#183;Jam计数法

题目描述 Description Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文字母按原先的顺序,排在前面的字母小于排在它后面的字母.我们把这样的“数字”称为Jam数字.在Jam数字中,每个字母互不相同,而且从左到右是严格递增的.每次,Jam还指定使用字母的范围,例如,从2到10,表示只能使用{b,c,d,e,f,g,h,i,j}这些字母.如果再规定位数为

算法-键索引计数法

键索引计数法适合于整数分为较小的简单排序方法,基本的步骤分为四步: 1.统计每个分类出现的次数: 2.将分类的次数转换为对应的索引: 3.通过中间数组按照分类的权重对原始数组排序: 4.将排序之后中间数组赋值给原始数组: 基础定义 首先定义排序需要的需要类: @interface keyIndexModel:NSObject @property (assign,nonatomic) NSInteger key; @property (strong,nonatomic) NSString *val

垃圾回收算法(1)-----标记计数法

标记计数法(Reference Counting) 主要内容 对于一个对象A,只要有任何一个对象引用了A,则A的引用计数器就加1,当引用失效时,引用计数器就减1.只要对象A的引用计数器的值为0,则对象A就不可能再被使用. 主要缺点 可能造成循环引用,无法回收的情况.例如,如下图,我们构造了一个列表,我们将最后一个元素的next属性指向第一个元素,即引用第一个元素,从而构成循环引用:这个时候如果我们将列表的头head赋值为null,此时列表的各个元素的计数器都不为0,同时我们也失去了对列表的引用控

ACM/ICPC算法训练 之 分治法入门(画图模拟:POJ 2083)

题意:大致就是要求画出这个有规律的Fractal图形了= = 例如 1 对应 X 2 对应 X  X   X    X  X 这个题是个理解分治法很典型的例子(详情请参见Code) 分治法:不断缩小规模,以致把整个大问题分解为若干个可以直接处理的小问题,一般通过递归调用实现,可以用极简代码完成高复杂的工作,但空间与时间占用也相对较大. 1 //分治法画图 2 //Memory:880K Time:16 Ms 3 #include<iostream> 4 #include<cstring&

Jam的计数法

Jam的计数法 (count.pas/c/cpp) [问题描述] Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文字母按原先的顺序,排在前面的字母小于排在它后面的字母.我们把这样的“数字”称为Jam数字.在Jam数字中,每个字母互不相同,而且从左到右是严格递增的.每次,Jam还指定使用字母的范围,例如,从2到10,表示只能使用{b,c,d,e,f,g,h,i

[计算机图形学] 基于C#窗口的Bresenham直线扫描算法、种子填充法、扫描线填充法模拟软件设计(一)

一.首先说明: 这是啥? —— 这是利用C#FORM写的一个用来演示计算机图形学中 ①Bresenham直线扫描算法(即:连点成线):②种子填充法(即:填充多边形):③扫描线填充法 有啥用? ——  无论是连点成线还是区域填充在高级编程中基本上都提供很高效的库函数来调用.这里拿出这些算法一方面有利于大家理解那些封装的函数底层是实现:另一方面是方便嵌入式TFT屏幕底层驱动开发时借鉴的. 是啥样? ——  如下面的操作,不言而喻. 二.进入正题: 2-1.直线的扫描转换 图形的扫描转换实质就是在光栅

1140 Jam的计数法

1140 Jam的计数法 2006年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文字母按原先的顺序,排在前面的字母小于排在它后面的字母.我们把这样的“数字”称为Jam数字.在Jam数字中,每个字母互

全排列(洛谷1061 Jam的计数法or NOIP 2006 普及组 第三题)

Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩. 在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文字母按原先的顺序,排在前面的字母小于排在它后面的字母.我们把这样的“数字”称为Jam数字.在Jam数字中,每个字母互不相同,而且从左到右是严格递增的.每次,Jam还指定使用字母的范围,例如,从2到10,表示只能使用{b,c,d,e,f,g,h,i,j}这些字母.如果再规定位数为5,那么,紧接在Jam数字“bd