Submission #1155666

#TimeUsernameProblemLanguageResultExecution timeMemory
1155666secretwood01Take-out (POI13_usu)C++17
100 / 100
179 ms41200 KiB
#include <iostream>
#include <deque>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>

class A {
public:
    std::vector<int> white;
    int black;
    static int K;
    int ind;

    A(int b) : black(b + 1), ind(0), white(K + 1) {}

    void add(int x) {
        white[ind] = x + 1;
        ind++;
    }

    bool isFilled() {
        return ind >= K;
    }

    std::string toString() {
        white[K] = black;
        std::sort(white.begin(), white.end());
        std::ostringstream oss;
        for (int i = 0; i < K; i++) {
            oss << white[i] << " ";
        }
        oss << white[K];
        return oss.str();
    }
};

int A::K;

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::deque<A> bs, ans;
    std::deque<int> ws;

    std::string line;
    std::getline(std::cin, line);
    std::istringstream iss(line);
    int N;
    iss >> N;
    iss >> A::K;

    std::getline(std::cin, line);
    std::string S = line;

    for (int i = 0; i < N; i++) {
        if (S[i] == 'b') {
            ws.push_back(i);
            while (!bs.empty() && !ws.empty()) {
                while (!bs.empty() && !bs.back().isFilled() && !ws.empty()) {
                    bs.back().add(ws.back());
                    ws.pop_back();
                }
                if (!bs.empty() && bs.back().isFilled()) {
                    ans.push_back(bs.back());
                    bs.pop_back();
                }
            }
        } else {
            bs.push_back(A(i));
            while (!bs.empty() && !ws.empty()) {
                while (!bs.empty() && !bs.back().isFilled() && !ws.empty()) {
                    bs.back().add(ws.back());
                    ws.pop_back();
                }
                if (!bs.empty() && bs.back().isFilled()) {
                    ans.push_back(bs.back());
                    bs.pop_back();
                }
            }
        }
    }

    while (!ans.empty()) {
        std::cout << ans.back().toString() << "\n";
        ans.pop_back();
    }

    return 0;
}

#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...