2010-09-24 121 views
1

聲明解決問題我需要幫助的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; 
} 
+0

這樣s [i + 1] ....句子的結尾是什麼? – 2010-09-24 15:36:06

+0

s [i + 1] Ronzii 2010-09-24 15:38:33

回答

1

最短,然後按字典順序最早。

所以解決方案將是:

  • BA:K = 1,長度= 2
  • CBA:K = 2,長度= 3
  • DBCA:K = 3,長度= 4
  • ZYX ....一個:K = 25,長度= 26
  • bazyx ....一個:K = 26,長度= 28
  • bcazyx ....一個:K = 27,長度= 29
  • ....
0

26,你可以這樣做:

A,B,Z,A,B

但我認爲最佳的解決方案是:

A,b,A,b,... Z

在一般情況下,我認爲你需要做一個 '小' 先運行,那麼所有的充分運行。

+0

解決方案需要儘可能短,然後如果有多個相同長度的解決方案,請按字典順序選擇第一個解決方案。 – 2010-09-24 15:58:49

+0

你其實已經考慮過s [i + 1]> s [i]「但問題是」s [i + 1] 2010-09-24 16:05:28

+0

我的不好,這個想法仍然適用,顛倒斜坡給出正確的解決方案... – Ssancho 2010-09-24 16:20:03