Submission #713460

# Submission time Handle Problem Language Result Execution time Memory
713460 2023-03-22T04:45:43 Z marvinthang Ancient Machine (JOI21_ancient_machine) C++17
0 / 100
53 ms 8172 KB
/*************************************
*    author: marvinthang             *
*    created: 21.03.2023 23:00:23    *
*************************************/

#include "Anna.h"
#include <bits/stdc++.h>

using namespace std;

#define                  fi  first
#define                  se  second
#define                left  ___left
#define               right  ___right
#define                TIME  (1.0 * clock() / CLOCKS_PER_SEC)
#define             MASK(i)  (1LL << (i))
#define           BIT(x, i)  ((x) >> (i) & 1)
#define  __builtin_popcount  __builtin_popcountll
#define              ALL(v)  (v).begin(), (v).end()
#define           REP(i, n)  for (int i = 0, _n = (n); i < _n; ++i)
#define          REPD(i, n)  for (int i = (n); i--; )
#define        FOR(i, a, b)  for (int i = (a), _b = (b); i < _b; ++i) 
#define       FORD(i, b, a)  for (int i = (b), _a = (a); --i >= _a; ) 
#define       FORE(i, a, b)  for (int i = (a), _b = (b); i <= _b; ++i) 
#define      FORDE(i, b, a)  for (int i = (b), _a = (a); i >= _a; --i) 

namespace {

}

void Anna(int n, vector <char> s) {
    vector <long long> f(64);
    f[0] = 1; f[1] = 2;
    FOR(i, 2, 64) f[i] = f[i - 1] + f[i - 2];
    auto find_pos = [&] (string s) {
        long long res = 0;
        REP(i, 63) if (s[i] == '1') res += f[62 - i];
        return res;
    };
    bool first_x = false;
    string res;
    REP(i, n) {
        if (!first_x && s[i] == 'X') {
            first_x = true;
            res += '1';
            ++i;
            if (i < n) {
                res += '0';
                Send(1);
            } else Send(0);
        } else if (first_x && s[i] == 'Z') {
            if (res.back() == '1') res.back() = '0';
            res += '1';
        }
        else res += '0';
    }
    while (res.size() % 63) res += '0';
    for (int i = 0; i < res.size(); i += 63) {
        string s = res.substr(i, 63);
        long long x = find_pos(s);
        REP(i, 44) Send(BIT(x, i));
    }
}
/*************************************
*    author: marvinthang             *
*    created: 21.03.2023 23:03:23    *
*************************************/

#include "Bruno.h"
#include <bits/stdc++.h>

using namespace std;

#define                  fi  first
#define                  se  second
#define                left  ___left
#define               right  ___right
#define                TIME  (1.0 * clock() / CLOCKS_PER_SEC)
#define             MASK(i)  (1LL << (i))
#define           BIT(x, i)  ((x) >> (i) & 1)
#define  __builtin_popcount  __builtin_popcountll
#define              ALL(v)  (v).begin(), (v).end()
#define           REP(i, n)  for (int i = 0, _n = (n); i < _n; ++i)
#define          REPD(i, n)  for (int i = (n); i--; )
#define        FOR(i, a, b)  for (int i = (a), _b = (b); i < _b; ++i) 
#define       FORD(i, b, a)  for (int i = (b), _a = (a); --i >= _a; ) 
#define       FORE(i, a, b)  for (int i = (a), _b = (b); i <= _b; ++i) 
#define      FORDE(i, b, a)  for (int i = (b), _a = (a); i >= _a; --i) 

namespace {

}

void Bruno(int N, int L, std::vector<int> A) {
    vector <long long> f(64);
    f[0] = 1; f[1] = 2;
    FOR(i, 2, 64) f[i] = f[i - 1] + f[i - 2];
    auto find_string = [&] (long long k) {
        string res;
        REP(i, 63) {
            if (k <= f[62 - i]) res += '0';
            else {
                res += '1';
                k -= f[62 - i];
            }
        }
        return res;
    };
    string s;
    for (int i = 1; i < A.size(); i += 44) {
        long long res = 0;
        FORD(j, i + 44, i) res = res * 2 + A[j];
        ++res;
        s += find_string(res);
    }

    int first_x = -1;
    int last = -1;
    REP(i, N) if (s[i] == '1') {
        if (first_x == -1) {
            first_x = i;
            REP(j, i) Remove(j);
            if (A[0]) {
                Remove(i + 1);
                ++i;
            }
        } else {
            FORD(j, i, last + 1) Remove(j);
            Remove(i);
        }
        last = i;
    }
    FOR(j, last + 1, N) Remove(j);
    if (first_x != -1) Remove(first_x);
}

Compilation message

Anna.cpp: In function 'void Anna(int, std::vector<char>)':
Anna.cpp:58:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::__cxx11::basic_string<char>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   58 |     for (int i = 0; i < res.size(); i += 63) {
      |                     ~~^~~~~~~~~~~~

Bruno.cpp: In function 'void Bruno(int, int, std::vector<int>)':
Bruno.cpp:47:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |     for (int i = 1; i < A.size(); i += 44) {
      |                     ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 508 KB Output is correct
2 Correct 1 ms 508 KB Output is correct
3 Correct 1 ms 516 KB Output is correct
4 Correct 0 ms 508 KB Output is correct
5 Incorrect 0 ms 520 KB Wrong Answer [6]
6 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 51 ms 7828 KB Output is correct
2 Correct 49 ms 8156 KB Output is correct
3 Correct 49 ms 8116 KB Output is correct
4 Correct 52 ms 8084 KB Output is correct
5 Correct 49 ms 8152 KB Output is correct
6 Correct 48 ms 8144 KB Output is correct
7 Correct 47 ms 8096 KB Output is correct
8 Correct 48 ms 8168 KB Output is correct
9 Correct 51 ms 8048 KB Output is correct
10 Correct 49 ms 8124 KB Output is correct
11 Correct 51 ms 8024 KB Output is correct
12 Correct 48 ms 8160 KB Output is correct
13 Incorrect 53 ms 8172 KB Wrong Answer [6]
14 Halted 0 ms 0 KB -