Мне нужна помощь в решении проблемы с codechef - PullRequest
1 голос
/ 24 сентября 2010

Заявление

Рассмотрим строку длины N, состоящую только из строчных букв алфавита a-z. Пусть s[i] будет символом в i-й позиции в строке (на основе 1). Строка является K-строкой, если существует ТОЧНО K значений i (1 <= i < N), таких что s[i+1]<s[i] (мы предполагаем 'a'<'b'<'c'<...<'z'). Учитывая K, найдите самую короткую K-строку. Если есть несколько решений, найдите лексикографически самую раннюю K-строку.

Input

Первая строка содержит количество тестов T (1 <= T <= 100). Каждый тест содержит целое число K (≤ 100). Выход </p>

выход

T строк, по одной на каждый тестовый пример, содержащих требуемую строку. Используйте только строчные буквы a-z.

Что я не могу понять, так это случай от 27 до 100. Я могу просто использовать массив символов для вычисления проблемы Это не весь алгоритм. Я все еще пытаюсь ......

#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 ]

1 голос
/ 24 сентября 2010

Самый короткий, затем лексикографически самый ранний.

Так что решения будут:

  • ba: K = 1, длина = 2
  • cba: K = 2, длина = 3
  • dbca:: K = 3, длина = 4
  • zyx .... a: K = 25, длина = 26
  • Базикс .... а: К = 26, длина = 28
  • bcazyx .... a: K = 27, длина = 29
  • ....
0 голосов
/ 24 сентября 2010

За 26 вы можете сделать:

а, б, ... з, а, б

Но я думаю, что оптимальное решение:

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

В общем, я думаю, что сначала вам нужно выполнить небольшой прогон, а затем все полные прогоны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...