Submission #1454151


Source Code Expand

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

#define REP(i,n) for(int i=0;i<n;++i)
#define SORT(name) sort(name.begin(), name.end())
#define ZERO(p) memset(p, 0, sizeof(p))
#define MINUS(p) memset(p, -1, sizeof(p))

#define MOD 1000000007
#define INF 1000000000
#define MAX_N 105

int N, K;
string S;
vector< pair<char, int> > sorted;
vector<char> change_pool;

int main()
{
    cin >> N >> K >> S;
    REP(i, S.length()) {
        sorted.push_back(make_pair(S[i], i));
    }
    SORT(sorted);
    string ans = S;
    if(K <= 1) {
        cout << ans << endl;
        return 0;
    }
    int cur = 0;
    while(K >= 2 && cur < S.length()) {
        if(S[cur] != '?' && S[cur] != sorted[cur].first) {
            change_pool.push_back(S[cur]);
            change_pool.push_back(sorted[cur].first);
            //printf("cur %d S[cur] %c sorted[cur].second %d sorted[cur].first %c\n",
            //        cur, S[cur], sorted[cur].second, sorted[cur].first);
            S[cur] = '?';
            S[sorted[cur].second] = '?';
            K -= 2;
        }
        else if(S[cur] != '?' && S[cur] == sorted[cur].first) {
            change_pool.push_back(S[cur]);
            S[cur] = '?';
        }
        else if(S[cur] == '?') {
            bool isFind = false;
            REP(i, change_pool.size()) {
                if(change_pool[i] == sorted[cur].first) {
                    isFind = true;
                    break;
                }
            }
            if(!isFind) {
                S[sorted[cur].second] = '?';
                change_pool.push_back(sorted[cur].first);
                K -= 1;
            }
        }
        cur++;
    }
    //cout << S << endl;
    while(K > 0) {
        pair<int, int> cand = make_pair(-1, 255);
        REP(i, S.length()) {
            //printf("%c %d\n", S[i], S[i]);
            if(S[i] != '?' && (int)S[i] < cand.second && S[i] != sorted[i].first) {
                cand = make_pair(i, S[i]);
            }
        }
        if(cand.first != -1) {
            S[cand.first] = '?';
            change_pool.push_back(cand.second);
        }
        K--;
    }
    //cout << S << endl;
    SORT(change_pool);
    int index = 0;
    REP(i, S.length()) {
        if(S[i] == '?') {
            S[i] = change_pool[index];
            index++;
        }
    }
    ans = S;

    cout << ans << endl;
    return 0;
}

Submission Info

Submission Time
Task C - 辞書式順序ふたたび
User VTR
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2480 Byte
Status WA
Exec Time 1 ms
Memory 256 KB

Judge Result

Set Name All
Score / Max Score 0 / 100
Status
AC × 30
WA × 28
Set Name Test Cases
All hand_1_0.txt, hand_1_1.txt, hand_1_2.txt, hand_1_3.txt, hand_1_4.txt, hand_1_5.txt, hand_1_6.txt, hand_1_7.txt, hand_1_8.txt, hand_2_0.txt, hand_2_1.txt, hand_2_10.txt, hand_2_2.txt, hand_2_3.txt, hand_2_4.txt, hand_2_5.txt, hand_2_6.txt, hand_2_7.txt, hand_2_8.txt, hand_2_9.txt, hand_3_2.txt, hand_3_3.txt, hand_3_4.txt, hand_3_5.txt, hand_3_6.txt, hand_4_2.txt, hand_4_3.txt, hand_4_4.txt, hand_4_5.txt, hand_4_6.txt, random_1.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_2.txt, random_3.txt, random_4.txt, random_5.txt, random_6.txt, random_7.txt, random_8.txt, random_9.txt, sample_1.txt, sample_2.txt, sample_3.txt, sample_4.txt, small_1.txt, small_2.txt, small_3.txt, small_4.txt, small_5.txt, small_6.txt, small_7.txt, small_8.txt, small_9.txt
Case Name Status Exec Time Memory
hand_1_0.txt AC 1 ms 256 KB
hand_1_1.txt AC 1 ms 256 KB
hand_1_2.txt WA 1 ms 256 KB
hand_1_3.txt AC 1 ms 256 KB
hand_1_4.txt AC 1 ms 256 KB
hand_1_5.txt WA 1 ms 256 KB
hand_1_6.txt WA 1 ms 256 KB
hand_1_7.txt WA 1 ms 256 KB
hand_1_8.txt WA 1 ms 256 KB
hand_2_0.txt AC 1 ms 256 KB
hand_2_1.txt AC 1 ms 256 KB
hand_2_10.txt AC 1 ms 256 KB
hand_2_2.txt WA 1 ms 256 KB
hand_2_3.txt AC 1 ms 256 KB
hand_2_4.txt AC 1 ms 256 KB
hand_2_5.txt AC 1 ms 256 KB
hand_2_6.txt WA 1 ms 256 KB
hand_2_7.txt AC 1 ms 256 KB
hand_2_8.txt AC 1 ms 256 KB
hand_2_9.txt AC 1 ms 256 KB
hand_3_2.txt WA 1 ms 256 KB
hand_3_3.txt WA 1 ms 256 KB
hand_3_4.txt WA 1 ms 256 KB
hand_3_5.txt WA 1 ms 256 KB
hand_3_6.txt WA 1 ms 256 KB
hand_4_2.txt WA 1 ms 256 KB
hand_4_3.txt WA 1 ms 256 KB
hand_4_4.txt WA 1 ms 256 KB
hand_4_5.txt WA 1 ms 256 KB
hand_4_6.txt WA 1 ms 256 KB
random_1.txt AC 1 ms 256 KB
random_10.txt WA 1 ms 256 KB
random_11.txt WA 1 ms 256 KB
random_12.txt WA 1 ms 256 KB
random_13.txt WA 1 ms 256 KB
random_14.txt WA 1 ms 256 KB
random_15.txt WA 1 ms 256 KB
random_2.txt AC 1 ms 256 KB
random_3.txt WA 1 ms 256 KB
random_4.txt WA 1 ms 256 KB
random_5.txt WA 1 ms 256 KB
random_6.txt WA 1 ms 256 KB
random_7.txt AC 1 ms 256 KB
random_8.txt AC 1 ms 256 KB
random_9.txt WA 1 ms 256 KB
sample_1.txt AC 1 ms 256 KB
sample_2.txt AC 1 ms 256 KB
sample_3.txt AC 1 ms 256 KB
sample_4.txt AC 1 ms 256 KB
small_1.txt AC 1 ms 256 KB
small_2.txt AC 1 ms 256 KB
small_3.txt AC 1 ms 256 KB
small_4.txt AC 1 ms 256 KB
small_5.txt AC 1 ms 256 KB
small_6.txt AC 1 ms 256 KB
small_7.txt AC 1 ms 256 KB
small_8.txt AC 1 ms 256 KB
small_9.txt AC 1 ms 256 KB