Решение задачи "Разбиение последовательности цифр" с Codeforces

Без пояснения   Просмотров: 8


Вам задана последовательность s, состоящая из n цифр от 1 до 9.

Вам нужно разбить ее на хотя бы два отрезка (отрезок — это последовательность подряд идущих элементов) (другими словами, вам нужно поставить разделители между некоторыми цифрами последовательности) таким образом, что каждый элемент принадлежит ровно одному отрезку и если результирующее разбиение будет представлено в виду последовательности целых чисел, то каждый следующий элемент этой последовательности будет строго больше, чем предыдущий.

Более формально: если результирующее разбиение последовательности — это t1,t2,…,tk, где k — количество элементов в разбиении, то для каждого i от 1 до k−1 должно выполняться условие ti
Например, если s=654, то вы можете разбить ее на части [6,54] и это будет являться подходящим разбиением. Но если вы разобьете ее на части [65,4], то это будет являться плохим разбиением, потому что 65>4. Если s=123, то вы можете разбить его на части [1,23] и [1,2,3], но не на части [12,3].

Ваша задача — найти любое подходящее разбиение для каждого из q независимых запросов.

Код

#include <iostream>

using namespace std;

int main()
{
    int t, n;
    cin >> t;
    string s;
    for(int i = 0; i < t; ++i){
        cin >> n >> s;
        if(s.size() == 2){
            if(s[0] >= s[1])
                cout << "NO" << endl;
            else{
                cout << "YES" << endl;
                cout << 2 << endl;
                cout << s[0] << " " << s.substr(1) << endl;
            }
        }
        else{
            cout << "YES" << endl;
            cout << 2 << endl;
            cout << s[0] << " " << s.substr(1) << endl;
        }
    }
    return 0;
}

         

 Администратор Photo Автор: Администратор


Отправить решение задачи
Чтобы отправить решение вам нужно войти в систему или зарегистрироваться

Комментарии

Чтобы написать комментарии вам нужно войти в систему или зарегистрироваться