제출 #1309135

#제출 시각아이디문제언어결과실행 시간메모리
1309135sweetwibu2k8Ancient Machine (JOI21_ancient_machine)C++20
0 / 100
33 ms6324 KiB
#include <bits/stdc++.h> #include "Anna.h" using namespace std; #define endl "\n" #define fi first #define se second #define pb push_back #define p_q priority_queue #define bit(n, i) (((n)>>(i))&1) #define all(x) x.begin(), x.end() typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,int> pli; typedef vector <vector <int> > vvi; const int M = 1e6 + 6; const int mod = 1e9 + 7; const int inf = 1e9 + 7; void maximize (int &a, int b) { if (a < b) a = b; } void minimize (int &a, int b) { if (a > b) a = b; } void add (int &a, int b) { a += b; if (a >= mod) a -= mod; } void del (int &a, int b) { a -= b; if (a < 0) a += mod; } // Anna ll f[M]; void Anna (int N, vector <char> S) { bool flag = false; vector <int> lmao; int hehe = 0; for (int i = 0; i < N; i ++) { if (!flag) { if (S[i] == 'X') flag = true, hehe = i; } if (S[i] == 'X' or S[i] == 'Y') lmao.pb (0); else lmao.pb (1); } f[0] = f[1] = 1; for (int i = 2; i <= 63; i ++) f[i] = f[i - 1] + f[i - 2]; flag = false; for (int i = 0; i < N - 1; i ++) { if (lmao[i] == 1) { if (lmao[i] == lmao[i + 1]) lmao[i] = 0; } } ll cur = 0; for (int i = 0; i < N; i ++) { cur += lmao[i] * f[i % 63]; if (i % 63 == 62) { for (int b = 0; b < 44; b ++) Send (bit (cur, b)); cur = 0; } } if ((N - 1) % 63 != 62) for (int b = 0; b < 44; b ++) Send (bit (cur, b)); for (int i = 0; i < 20; i ++) Send (bit (hehe, i)); }
#include <bits/stdc++.h> #include "Bruno.h" using namespace std; #define endl "\n" #define fi first #define se second #define pb push_back #define p_q priority_queue #define bit(n, i) (((n)>>(i))&1) #define all(x) x.begin(), x.end() typedef long long ll; typedef pair<int,int> pii; typedef pair<ll,int> pli; typedef vector <vector <int> > vvi; const int M = 1e6 + 6; const int mod = 1e9 + 7; const int inf = 1e9 + 7; void maximize (int &a, int b) { if (a < b) a = b; } void minimize (int &a, int b) { if (a > b) a = b; } void add (int &a, int b) { a += b; if (a >= mod) a -= mod; } void del (int &a, int b) { a -= b; if (a < 0) a += mod; } // Bruno ll f[M]; void Bruno (int N, int L, vector <int> data) { f[0] = f[1] = 1; for (int i = 2; i <= 63; i ++) f[i] = f[i - 1] + f[i - 2]; vector <int> A; ll cur = 0; int m = data.size() / 44 * 44; for (int i = 0; i < m; i ++) { cur += data[i] * (1ll << (i % 44)); if (i % 44 == 43) { vector <int> lmao (63, 0); for (int b = 62; b >= 0; b --) { if (cur >= f[b]) { lmao[b] = 1; cur -= f[b]; } } cur = 0; for (int &x : lmao) A.pb (x); } } while (A.size() > N) A.pop_back (); int id = 0; for (int i = m; i < data.size(); i ++) id += data[i] * (1 << (i - m)); A[id] = 1; vector <int> st; reverse (all (A)); int cnt = 0; while (A.size() and A.back() == 0) { Remove (cnt); cnt ++; A.pop_back (); } if (A.empty()) return; int firstX = cnt ++; A.pop_back (); while (A.size()) { if (A.back () == 1) { while (st.size()) { Remove (st.back()); st.pop_back (); } Remove (cnt); } else st.pb (cnt); cnt ++; A.pop_back(); } Remove (firstX); while (st.size()) { Remove (st.back()); st.pop_back (); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...