Submission #1166998

#TimeUsernameProblemLanguageResultExecution timeMemory
1166998SangMessage (IOI24_message)C++20
100 / 100
397 ms848 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; i++) #define FORD(i, a, b) for (int i = (a), _b = (b); i >= _b; i--) #define fi first #define se second #define pb push_back #define ALL(a) (a).begin(), (a).end() #define task ".\\IOI24_P2\\2-04" typedef vector<int> vi; typedef pair<int, int> ii; typedef pair<int, ii> pii; const int N = 1e5 + 5; const int INF = 0x3f3f3f3f; const int MOD = 1e9 + 2277; vector<bool> send_packet(vector<bool> A); void send_message(vector<bool> M, vector<bool> C){ vector<int> d(35, 0); int last = -1; int s = 0; FOR (i, 0, 30){ if (C[i]) continue; if (last != -1){ d[last] = i - last; s += i - last; } last = i; } FOR (i, 0, 30){ if (C[i] == 0){ d[last] = i + 31 - last; s += i + 31 - last; break; } } assert(s == 31); last = M.back(); FOR (i, 1, 66){ vector<bool> packet; FOR (j, 0, 30){ if (C[j] || d[j] > i) { packet.pb(0); continue; } if (d[j] == i){ packet.pb(1); continue; } packet.pb((!M.empty() ? M.back() : (last ^ 1))); if (!M.empty()){ last = M.back(); M.pop_back(); } } send_packet(packet); } } vector<bool> receive_message(vector<vector<bool>> R){ vector<int> d(35, 0); FOR (i, 0, 16){ FOR (j, 0, 30){ if (d[j] || R[i][j] == 0) continue; d[j] = i + 1; } } vector<int> good(35, 0); FOR (i, 0, 30){ int j = i; int cnt = 1; while (d[j] && j + d[j] <= 30){ ++cnt; j += d[j]; } if (cnt != 16 || (j + d[j])%31 != i){ continue; } j = i; while (d[j] && j + d[j] <= 30){ good[j] = 1; j += d[j]; } good[j] = 1; break; } vector<bool> ans; FOR (i, 0, 65){ FOR (j, 0, 30){ if (!good[j]) continue; if (i + 1 <= d[j]) continue; ans.pb(R[i][j]); } } int last = ans.back(); while (!ans.empty() && ans.back() == last) ans.pop_back(); reverse(ALL(ans)); return ans; } #ifdef _Pbrngw_ vector<vector<bool>> R; vector<bool> send_packet(vector<bool> A){ assert(A.size() == 31); R.pb(A); return A; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); if (fopen(task".in", "r")){ freopen(task".in", "r", stdin); } int t; cin >> t; FOR (i, 1, t){ int S; cin >> S; vector<bool> M(S), C(31); FOR (i, 0, S - 1){ int x; cin >> x; M[i] = x; } FOR (i, 0, 30) { int x; cin >> x; C[i] = x; } R.clear(); send_message(M, C); vector<bool> ans = receive_message(R); if (ans != M){ cout << i << '\n'; return 0; } cout << "AC\n"; } return 0; } #endif // _Pbrngw_
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...