提出 #76079892


ソースコード 拡げる

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define LONGMAX 1e18
#define INTMAX 2147483647

#include <bits/stdc++.h>
using namespace std;

int main()
{
    ll T;
    cin >> T;
    for (ll i = 0; i < T; i++)
    {
        string S;
        cin >> S;
        ll N = S.length();
        vector<ll> cnt(26, 0);
        for (ll j = 0; j < N; j++)
        {
            cnt[S[j] - 'a']++;
        }
        if ((*max_element(cnt.begin(), cnt.end())) > ((N + 1) / 2))
        { // 一番多い文字がM個あったとしたら、M-1個の隙間を埋める必要があり、使える文字はN-M個、つまりN-M<M-1, (N+1)/2<Mで埋められない, このときはNo
            cout << "No" << endl;
            continue;
        }
        priority_queue<pair<ll, char>> pq;
        for (ll j = 0; j < 26; j++)
        {
            if (cnt[j] != 0)
                pq.push({cnt[j], 'a' + j});
        }
        string ans;
        while (pq.size() >= 2) // 2つずつ取り出すので1個以下になったら終了
        {
            auto [c1, ch1] = pq.top();
            pq.pop();
            auto [c2, ch2] = pq.top();
            pq.pop();
            ans += ch1;
            ans += ch2; // 交互に連結させていく
            c1--;       // 在庫が0になるまで
            c2--;
            if (c1 != 0)
                pq.push({c1, ch1});
            if (c2 != 0)
                pq.push({c2, ch2});
        }
        if (!pq.empty()) // 1個残っていたら連結
        {
            ans += pq.top().second;
        }
        cout << "Yes" << endl;
        cout << ans << endl;
    }

    return 0;
}

提出情報

提出日時
問題 D - Adjacent Distinct String
ユーザ lalashvbp
言語 C++23 (GCC 15.2.0)
得点 400
コード長 1709 Byte
結果 AC
実行時間 238 ms
メモリ 7176 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 400 / 400
結果
AC × 1
AC × 21
セット名 テストケース
Sample 00_sample_00.txt
All 00_sample_00.txt, 01_handmade_00.txt, 01_handmade_01.txt, 01_handmade_02.txt, 01_handmade_03.txt, 01_handmade_04.txt, 01_handmade_05.txt, 02_random_00.txt, 02_random_01.txt, 02_random_02.txt, 02_random_03.txt, 02_random_04.txt, 02_random_05.txt, 02_random_06.txt, 02_random_07.txt, 02_random_08.txt, 02_random_09.txt, 02_random_10.txt, 02_random_11.txt, 02_random_12.txt, 02_random_13.txt
ケース名 結果 実行時間 メモリ
00_sample_00.txt AC 1 ms 3532 KiB
01_handmade_00.txt AC 238 ms 3472 KiB
01_handmade_01.txt AC 84 ms 3600 KiB
01_handmade_02.txt AC 14 ms 5396 KiB
01_handmade_03.txt AC 17 ms 7140 KiB
01_handmade_04.txt AC 17 ms 7168 KiB
01_handmade_05.txt AC 20 ms 3644 KiB
02_random_00.txt AC 39 ms 7000 KiB
02_random_01.txt AC 38 ms 6996 KiB
02_random_02.txt AC 39 ms 7136 KiB
02_random_03.txt AC 13 ms 5416 KiB
02_random_04.txt AC 13 ms 5256 KiB
02_random_05.txt AC 13 ms 5348 KiB
02_random_06.txt AC 13 ms 5240 KiB
02_random_07.txt AC 25 ms 7176 KiB
02_random_08.txt AC 27 ms 3644 KiB
02_random_09.txt AC 23 ms 3440 KiB
02_random_10.txt AC 18 ms 3524 KiB
02_random_11.txt AC 18 ms 3592 KiB
02_random_12.txt AC 17 ms 3568 KiB
02_random_13.txt AC 16 ms 3612 KiB