답안 #1072774

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1072774 2024-08-24T04:26:38 Z GusterGoose27 Ancient Machine (JOI21_ancient_machine) C++17
5 / 100
2000 ms 9520 KB
#include "Anna.h"

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

#define sz(s) (int(s.size()))

void Anna(int n, vector<char> S) {
    vector<int> conv;
    int p = 1;
    for (int i = 0; i < n && S[i] != 'X'; i++) S[i] = 'Y';
    int r = n-1;
    for (; r >= 0 && S[r] != 'Z'; r--) S[r] = 'Y';
    if (r < 2) return;
    for (char c: S) {
        int v = c-'X';
        if ((v&1)==(p&1)) conv.push_back(1);
        else {
            conv.push_back(v);
            p = v;
        }
    }
    bool real = S[r-1] == 'Y';
    conv.resize(r);
    conv.push_back(1);
    for (int i = 0; i < sz(conv); i++) {
        if (conv[i] == 1) Send(0);
        else {
            Send(1);
            Send(conv[i] == 2);
            i++;
        }
    }
    Send(real);
}
#include "Bruno.h"
#include <bits/stdc++.h>

using namespace std;

#define sz(s) (int(s.size()))

void Bruno(int n, int l, vector<int> A) {
    if (sz(A) == 0) {
        for (int i = 0; i < n; i++) Remove(i);
        return;
    }
    vector<int> tp;
    set<int> xz, y;
    for (int i = 0; i < l-1; i++) {
        if (A[i] == 0) tp.push_back(1);
        else {
            i++;
            tp.push_back(2*A[i]);
            tp.push_back(1);
        }
    }
    int r = sz(tp)-1;
    tp[r] = 2;
    while (sz(tp) < n) tp.push_back(1);
    for (int i = 0; i < n; i++) {
        if (tp[i]&1) y.insert(i);
        else xz.insert(i);
    }
    auto del = [&](int v) {
        if (tp[v]&1) {
            if (y.find(v) == y.end()) return;
            y.erase(v);
        }
        else {
            if (xz.find(v) == xz.end()) return;
            xz.erase(v);
        }
        Remove(v);
    };
    if (!A[l-1]) {
        auto x = xz.find(r);
        int v = *(--x);
        for (; v < r; v++) del(v);
    }
    if (sz(xz) > 1) {
        for (int s = *(xz.begin()); s != *(xz.rbegin()); ) {
            int nxt = *(xz.upper_bound(s));
            if (nxt == r) break;
            if (tp[nxt] == 0) {
                s = nxt;
                continue;
            }
            for (int i = s+1; i <= nxt; i++) del(i);
        }
        int s = *(xz.rbegin());
        int lim = s;
        while (sz(xz) > 1) {
            int p = *(--xz.find(s));
            for (int i = p+1; i < lim; i++) del(i);
            del(p);
            lim = p;
        }
    }
    for (int i = 0; i < n; i++) del(i);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 780 KB Output is correct
2 Correct 0 ms 784 KB Output is correct
3 Correct 0 ms 840 KB Output is correct
4 Correct 1 ms 792 KB Output is correct
5 Correct 1 ms 796 KB Output is correct
6 Correct 0 ms 860 KB Output is correct
7 Correct 0 ms 784 KB Output is correct
8 Correct 0 ms 800 KB Output is correct
9 Correct 0 ms 796 KB Output is correct
10 Correct 0 ms 780 KB Output is correct
11 Correct 1 ms 780 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 59 ms 9032 KB Partially correct
2 Partially correct 57 ms 9392 KB Partially correct
3 Partially correct 55 ms 9408 KB Partially correct
4 Partially correct 55 ms 9336 KB Partially correct
5 Partially correct 56 ms 9228 KB Partially correct
6 Partially correct 61 ms 9264 KB Partially correct
7 Partially correct 61 ms 9100 KB Partially correct
8 Partially correct 54 ms 9264 KB Partially correct
9 Partially correct 55 ms 9184 KB Partially correct
10 Partially correct 56 ms 9080 KB Partially correct
11 Partially correct 56 ms 9276 KB Partially correct
12 Partially correct 55 ms 9520 KB Partially correct
13 Partially correct 63 ms 9016 KB Partially correct
14 Execution timed out 2009 ms 8464 KB Time limit exceeded
15 Halted 0 ms 0 KB -