其他分享
首页 > 其他分享> > P1061 [NOIP2006 普及组] Jam 的计数法——模拟,想复杂了

P1061 [NOIP2006 普及组] Jam 的计数法——模拟,想复杂了

作者:互联网

https://www.luogu.com.cn/problem/P1061
or
http://www.kencoding.net/problem.php?cid=1026&pid=2
题目描述
Jam是个喜欢标新立异的科学怪人。他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩。

在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文字母按原先的顺序,排在前面的字母小于排在它后面的字母。我们把这样的“数字”称为Jam数字。在Jam数字中,每个字母互不相同,而且从左到右是严格递增的。每次,Jam还指定使用字母的范围,例如,从2到10,表示只能使用 b , c , d , e , f , g , h , i , j {b,c,d,e,f,g,h,i,j} b,c,d,e,f,g,h,i,j这些字母。如果再规定位数为5,那么,紧接在Jam数字“bdfijbdfij”之后的数字应该是“bdghibdghi”。(如果我们用U、V依次表示JamJam数字“bdfijbdfij”与“bdghibdghi”,则U<V,且不存在Jam数字P,使U<P<V)。

你的任务是:对于从文件读入的一个Jam数字,按顺序输出紧接在后面的5个Jam数字,如果后面没有那么多Jam数字,那么有几个就输出几个。

输入格式
共2行。

第1行为3个正整数,用一个空格隔开:s t w(其中s为所使用的最小的字母的序号,t为所使用的最大的字母的序号。w为数字的位数,这3个数满足: 1 ≤ s < T ≤ 26 , 2 ≤ w ≤ t − s 1≤s<T≤26, 2≤w≤t-s 1≤s<T≤26,2≤w≤t−s )

第2行为具有w个小写字母的字符串,为一个符合要求的Jam数字。

所给的数据都是正确的,不必验证。

输出格式
最多为5行,为紧接在输入的Jam数字后面的5个Jam数字,如果后面没有那么多Jam数字,那么有几个就输出几个。每行只输出一个Jam数字,是由w个小写字母组成的字符串,不要有多余的空格。

输入输出样例
输入

  2 10 5
  bdfij

输出

bdghi
bdghj
bdgij
bdhij
befgh

说明/提示
NOIP 2006 普及组 第三题

——————————————

今天考试,当然不是14年前的普及组考试,是今天的东城区挑战赛,第三道题就是这道题,只不过改成了“唐三的计数法”,我没做过这道题,刚看到这道题还以为要用搜索,写了一个小时,直接想复杂了。后来才明白直接模拟即可!

从最后一位开始,尝试加一个字符,然后新加的字符以后的所有字符都要紧跟(就这一点,我用深搜写不出来,归根结底还是理解不够),才能使新增的字符串紧跟上一个字符串。

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int main()
{
    int s, t, w;
    char str[30];
    cin >> s >> t >> w >> str;
    for (int i = 1; i <= 5; i++)
    {
        for (int j = w - 1; j >= 0; j--)
        {
            if (str[j] + 1 <= ('a' + (t - (w - j))))
            {
                // 确认当前有可用字母就可以大胆用了,j就是变动位
                str[j] += 1;
                // 当前位置后的位置都是对齐位
                for (int k = j + 1; k < w; k++)
                    str[k] = str[j] + k - j;
                cout << str << endl;
                // 是每次找到一组合适的就跳出
                break;
            }
        }
    }
    return 0;
}


/*
一个方法做的时间超过半小时,或者思路减退、代码渐渐复杂、心态渐渐崩溃时,要及时切换思路。
*/

标签:输出,NOIP2006,数字,int,字母,计数法,Jam,str
来源: https://blog.csdn.net/cool99781/article/details/116902217