我需要帮助解决codechef上的问题

时间:2010-09-24 15:31:03

标签: algorithm

声明

考虑一个长度为N的字符串,仅由小写字母a-z组成。设s[i]为字符串中第i个位置的字符(从1开始)。如果i(1 <= i < N)的确切K值为s[i+1]<s[i](我们假设为'a'<'b'<'c'<...<'z'),则该字符串为K字符串。给定K,找到最短的K字符串。如果有多个解决方案,请找到按字典顺序排列的最早的K字符串。

输入

第一行包含测试用例T的数量(1 <= T <= 100)。每个测试用例包含一个整数K(≤100)。 输出

输出

T行,每个测试用例一行,包含所需的字符串。仅使用小写字母a-z。

我无法理解的是27到100的情况。我可以简单地使用char数组来计算问题 这不是整个算法。我还在努力......

#include<iostream>
using namespace std;
int main()
{
char s[]={'0','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
    int k;
    cin>>k;
    for(int i=k;i>=1;i--)
    {
      //cout<<s[i+1]<<">"<<s[i];
      if(s[i+1]>s[i])
       cout<<s[i];

    }
    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:1)

最短,然后是词典最早。

所以解决方案将是:

  • ba:K = 1,长度= 2
  • cba:K = 2,长度= 3
  • dbca :: K = 3,长度= 4
  • zyx .... a:K = 25,长度= 26
  • bazyx .... a:K = 26,长度= 28
  • bcazyx .... a:K = 27,长度= 29
  • ....

答案 1 :(得分:0)

对于26,你可以这样做:

a,b,... z,a,b

但我认为最佳解决方案是:

a,b,a,b,... z

一般来说,我认为你需要首先进行“小”运行,然后进行全部运行。