# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
931365 | 2024-02-21T16:35:06 Z | boris_mihov | Ancient Machine (JOI21_ancient_machine) | C++17 | 46 ms | 8588 KB |
#include "Anna.h" #include <algorithm> #include <iostream> #include <cassert> #include <vector> typedef long long llong; const int BUCKET_SIZE = 73; const int MYLOG = 51; llong fib[BUCKET_SIZE + 5]; struct FibbonacciConverter { std::string getString(std::string s) { while (s.size() % BUCKET_SIZE != 0) { s += '0'; } // std::cout << "send: " << s.size() << '\n'; std::string res; for (int i = 0 ; i < s.size() ; i += BUCKET_SIZE) { llong currNum = 0; std::string sequence; for (int j = i ; j < i + BUCKET_SIZE ; ++j) { sequence += s[j]; if (j != i) assert(s[j] == '0' || s[j - 1] == '0'); if (s[j] == '1') currNum += fib[j - i]; assert(currNum < (1LL << MYLOG)); } assert(currNum <= fib[BUCKET_SIZE]); // std::cout << "curr num is: " << sequence << '\n'; for (int log = MYLOG - 1 ; log >= 0 ; --log) { if (currNum & (1LL << log)) { res += '1'; } else { res += '0'; } } } // std::cout << "here: " << res << '\n'; // std::cout << "here: " << fromString(res) << '\n'; // std::cout << "here: " << s << '\n'; // exit(0); // std::cout << "are equal: " << (fromString(res) == s) << '\n'; // assert(fromString(res) == s); return res; } std::string fromString(std::string s) { assert(s.size() % MYLOG == 0); std::string res; for (int i = 0 ; i < s.size() ; i += MYLOG) { llong currNum = 0; for (int j = i ; j < i + MYLOG ; ++j) { currNum *= 2; if (s[j] == '1') { currNum++; } } std::string toAdd; for (int pos = BUCKET_SIZE ; pos > 0 ; --pos) { if (currNum >= fib[pos - 1]) { toAdd += '1'; currNum -= fib[pos - 1]; } else { toAdd += '0'; } } assert(currNum == 0); std::reverse(toAdd.begin(), toAdd.end()); // std::cout << "curr num is: " << toAdd << '\n'; res += toAdd; } return res; } }; void Anna(int N, std::vector <char> s) { fib[0] = 1; fib[1] = 2; for (int i = 2 ; i < BUCKET_SIZE + 5 ; ++i) { fib[i] = fib[i - 1] + fib[i - 2]; } std::string res; bool foundX = false; int xPos = -2; bool hasZinFront = false; for (int i = 0 ; i < N ; ++i) { if (!foundX && s[i] == 'X') { xPos = i; foundX = true; res += '1'; // std::cout << i << " "; } else if (foundX && s[i] == 'Z' && ((res.back() == '0' && (i + 1 == N || s[i + 1] != 'Z')))) { // std::cout << i << " "; res += '1'; } else if (s[i] == 'Z' && i == xPos + 1) { res += '0'; hasZinFront = true; } else { // assert(!foundX || s[i - 1] == 'X' || s[i] != 'Z' || (i + 1 < N && s[i + 1] == 'Z')); res += '0'; } } // std::cout << "x pos: " << xPos << '\n'. // std::cout << "has z in front: " << hasZinFront << '\n'; // std::cout << "Res before: " << res << '\n'; // std::cout << "send: " << res << FibbonacciConverter converter; res = converter.getString(res); // std::cout << "res: " << res.size() << '\n'; for (int i = 0 ; i < res.size() ; ++i) { Send(res[i] - '0'); } Send(hasZinFront); // std::cout << "\n\n\n"; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 780 KB | Output is correct |
2 | Correct | 0 ms | 784 KB | Output is correct |
3 | Correct | 0 ms | 796 KB | Output is correct |
4 | Correct | 0 ms | 796 KB | Output is correct |
5 | Correct | 0 ms | 784 KB | Output is correct |
6 | Correct | 0 ms | 796 KB | Output is correct |
7 | Correct | 0 ms | 784 KB | Output is correct |
8 | Correct | 0 ms | 784 KB | Output is correct |
9 | Correct | 0 ms | 780 KB | Output is correct |
10 | Correct | 1 ms | 784 KB | Output is correct |
11 | Correct | 0 ms | 792 KB | Output is correct |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Correct | 46 ms | 8436 KB | Output is correct |
2 | Correct | 40 ms | 8328 KB | Output is correct |
3 | Correct | 40 ms | 8300 KB | Output is correct |
4 | Correct | 40 ms | 8364 KB | Output is correct |
5 | Correct | 40 ms | 8452 KB | Output is correct |
6 | Correct | 40 ms | 8316 KB | Output is correct |
7 | Correct | 40 ms | 8468 KB | Output is correct |
8 | Correct | 40 ms | 8392 KB | Output is correct |
9 | Correct | 40 ms | 8464 KB | Output is correct |
10 | Correct | 40 ms | 8284 KB | Output is correct |
11 | Correct | 40 ms | 8364 KB | Output is correct |
12 | Correct | 40 ms | 8316 KB | Output is correct |
13 | Correct | 46 ms | 8328 KB | Output is correct |
14 | Correct | 44 ms | 8420 KB | Output is correct |
15 | Correct | 42 ms | 8588 KB | Output is correct |
16 | Correct | 41 ms | 8284 KB | Output is correct |
17 | Correct | 44 ms | 8520 KB | Output is correct |
18 | Correct | 44 ms | 8304 KB | Output is correct |
19 | Correct | 44 ms | 8316 KB | Output is correct |
20 | Correct | 40 ms | 8416 KB | Output is correct |
21 | Correct | 42 ms | 8556 KB | Output is correct |
22 | Correct | 43 ms | 8312 KB | Output is correct |
23 | Correct | 39 ms | 8420 KB | Output is correct |
24 | Correct | 45 ms | 8384 KB | Output is correct |
25 | Correct | 45 ms | 8332 KB | Output is correct |
26 | Correct | 44 ms | 8320 KB | Output is correct |
27 | Correct | 44 ms | 8368 KB | Output is correct |
28 | Correct | 43 ms | 8172 KB | Output is correct |
29 | Correct | 44 ms | 8300 KB | Output is correct |
30 | Correct | 45 ms | 8348 KB | Output is correct |
31 | Correct | 45 ms | 8308 KB | Output is correct |
32 | Correct | 40 ms | 8416 KB | Output is correct |
33 | Correct | 40 ms | 8296 KB | Output is correct |