Submission #1136991

#TimeUsernameProblemLanguageResultExecution timeMemory
1136991adaawfAncient Machine (JOI21_ancient_machine)C++20
100 / 100
50 ms7140 KiB
#include <bits/stdc++.h>
#include "Anna.h"
using namespace std;
string res = "";
long long int f[105];
void Anna(int n, vector<char> s) {
    vector<int> v;
    int fl = 0;
    for (int i = 0; i < s.size(); i++) {
        if (s[i] == 'X' && fl == 0) {
            fl = 1;
            v.push_back(1);
            v.push_back(0);
        }
        else if (s[i] == 'Z' && fl == 1) {
            if (i + 1 < s.size() && s[i + 1] == 'Z') {
                v.push_back(0);
            }
            else v.push_back(1);
        }
        else v.push_back(0);
    }
    while (v.size() % 63 != 0) v.push_back(0);
    f[0] = 1; f[1] = 2;
    for (int i = 2; i <= 63; i++) f[i] = f[i - 1] + f[i - 2];
    for (int i = 0; i < v.size(); i += 63) {
        long long int c = 0;
        for (int j = 0; j < 63; j++) {
            if (v[i + j] == 1) {
                c += f[j];
            }
        }
        for (int i = 0; i < 44; i++) {
            if (c & (1ll << i)) {
                Send(1);
            }
            else Send(0);
        }
    }
    for (int i = 0; i <= 16; i++) {
        if (n & (1 << i)) Send(1);
        else Send(0);
    }
}
#include <bits/stdc++.h>
#include "Bruno.h"
using namespace std;
long long int f[105], res[200005];
void Bruno(int n, int l, vector<int> v) {
    vector<int> vv;
    f[0] = 1; f[1] = 2;
    for (int i = 2; i <= 63; i++) {
        f[i] = f[i - 1] + f[i - 2];
    }
    for (int i = 0; i < l - 17; i += 44) {
        long long int h = 0;
        for (int j = 0; j < 44; j++) {
            if (v[i + j] == 1) {
                h += (1ll << j);
            }
        }
        for (int j = 63; j >= 0; j--) {
            if (h >= f[j]) {
                h -= f[j];
                res[i / 44 * 63 + j] = 1;
            }
        }
    }
    int flag = 0;
    for (int i = 0; i <= (l - 17) / 44 * 63; i++) {
        if (res[i] == 1) {
            vv.push_back(i - flag);
            flag = 1;
        }
    }
    int nn = 0;
    for (int i = 0; i <= 16; i++) {
        if (v[l - 17 + i] == 1) {
            nn += (1 << i);
        }
    }
    if (vv.empty()) {
        for (int i = 0; i < nn; i++) Remove(i);
        return;
    }
    for (int i = 1; i < vv.size(); i++) {
        for (int j = vv[i] - 1; j > vv[i - 1]; j--) Remove(j);
        Remove(vv[i]);
    }
    for (int i = 0; i <= vv[0]; i++) Remove(i);
    for (int i = vv.back() + 1; i < nn; i++) Remove(i);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...