我需要帮助的codechef
声明解决问题我需要帮助的codechef
考虑的仅由小写字母A-Z长度为N的字符串。假设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)。 输出
输出
Ť线,一个用于每个试验情况下,含有所需的字符串。只能使用小写字母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;
}
最短,然后按字典顺序最早。
所以解决方案将是:
- BA:K = 1,长度= 2
- CBA:K = 2,长度= 3
- DBCA:K = 3,长度= 4
- ZYX ....一个:K = 25,长度= 26
- bazyx ....一个:K = 26,长度= 28
- bcazyx ....一个:K = 27,长度= 29
- ....
26,你可以这样做:
A,B,Z,A,B
但我认为最佳的解决方案是:
A,b,A,b,... Z
在一般情况下,我认为你需要做一个 '小' 先运行,那么所有的充分运行。
解决方案需要尽可能短,然后如果有多个相同长度的解决方案,请按字典顺序选择第一个解决方案。 – 2010-09-24 15:58:49
你其实已经考虑过s [i + 1]> s [i]“但问题是”s [i + 1]
2010-09-24 16:05:28
我的不好,这个想法仍然适用,颠倒斜坡给出正确的解决方案... – Ssancho 2010-09-24 16:20:03
这样s [i + 1] ....句子的结尾是什么? – 2010-09-24 15:36:06
s [i + 1]
Ronzii 2010-09-24 15:38:33