제출 #935598

#제출 시각아이디문제언어결과실행 시간메모리
935598wiiAncient Machine (JOI21_ancient_machine)C++17
99 / 100
52 ms8268 KiB
#include <vector> #include <iostream> using namespace std; typedef long long ll; void Anna(int N, std::vector<char> S); void Send(int a); void Anna(int N, std::vector<char> S) { const int Lim = 64; const int LOG = 45; int cnt[3] = {0}; for (char x: S) { if (x == 'X') ++cnt[0]; if (x == 'Y') ++cnt[1]; if (x == 'Z') ++cnt[2]; } vector<int> a; a.assign(N, 0); int res = 0; for (int i = 0; i < N; ++i) if (S[i] == 'X') { res = i; break; } for (int i = 1; i <= 17; ++i) Send(res >> i - 1 & 1); for (int i = 0; i < N; ++i) if (i > res) a[i] = (S[i] == 'Z'); for (int i = 1; i < N; ++i) if (a[i - 1] == 1 && a[i] == 1) a[i - 1] = 0; vector<ll> fibo(65); fibo[0] = 1; fibo[1] = 1; for (int i = 2; i <= 64; ++i) fibo[i] = fibo[i - 1] + fibo[i - 2]; for (int i = 0; i < N; i += Lim) { ll hash_num = 0; for (int j = i; j < N && j < i + Lim; ++j) if (a[j] == 1) hash_num += fibo[j - i + 1]; for (int u = 1; u <= LOG; ++u) Send(hash_num >> u - 1 & 1); } }
#include <deque> #include <vector> #include <iostream> #include <algorithm> using namespace std; typedef long long ll; void Bruno(int N, int L, std::vector<int> A); void Remove(int d); // 11 XYZXZYXYXYZ void Bruno(int N, int L, std::vector<int> A) { const int Lim = 64; const int LOG = 45; int ptr = 0; int first_x = 0; for (int i = 1; i <= 17; ++i) { if (A[ptr] == 1) first_x += 1LL << i - 1; ++ptr; } vector<int> pos_z; pos_z.push_back(first_x); vector<ll> fibo(65); fibo[0] = 1; fibo[1] = 1; for (int i = 2; i <= 64; ++i) fibo[i] = fibo[i - 1] + fibo[i - 2]; int cur = 0; for (int i = ptr; i < A.size(); i += LOG) { ll hash_num = 0; for (int j = 1; j <= LOG && i + j - 1 < A.size(); ++j) if (A[i + j - 1] == 1) hash_num += 1LL << j - 1; for (int u = Lim ; u >= 1; --u) if (hash_num >= fibo[u]) { pos_z.push_back(cur + u - 1); hash_num -= fibo[u]; } cur += Lim; } sort(pos_z.begin(), pos_z.end()); for (int i = 1; i < pos_z.size(); ++i) { int l = pos_z[i - 1]; int r = pos_z[i]; // cout << l << " " << r << "\n"; for (int u = r - 1; u > l; --u) Remove(u); Remove(r); } for (int i = pos_z.back() + 1; i < N; ++i) Remove(i); for (int i = 0; i <= pos_z[0]; ++i) Remove(i); }

컴파일 시 표준 에러 (stderr) 메시지

Anna.cpp: In function 'void Anna(int, std::vector<char>)':
Anna.cpp:31:23: warning: suggest parentheses around '-' inside '>>' [-Wparentheses]
   31 |         Send(res >> i - 1 & 1);
      |                     ~~^~~
Anna.cpp:52:32: warning: suggest parentheses around '-' inside '>>' [-Wparentheses]
   52 |             Send(hash_num >> u - 1 & 1);
      |                              ~~^~~

Bruno.cpp: In function 'void Bruno(int, int, std::vector<int>)':
Bruno.cpp:23:33: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   23 |             first_x += 1LL << i - 1;
      |                               ~~^~~
Bruno.cpp:36:25: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |     for (int i = ptr; i < A.size(); i += LOG) {
      |                       ~~^~~~~~~~~~
Bruno.cpp:38:47: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 |         for (int j = 1; j <= LOG && i + j - 1 < A.size(); ++j)
      |                                     ~~~~~~~~~~^~~~~~~~~~
Bruno.cpp:40:38: warning: suggest parentheses around '-' inside '<<' [-Wparentheses]
   40 |                 hash_num += 1LL << j - 1;
      |                                    ~~^~~
Bruno.cpp:48:23: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 |     for (int i = 1; i < pos_z.size(); ++i) {
      |                     ~~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...