Submission #330890

#TimeUsernameProblemLanguageResultExecution timeMemory
330890NachoLibreBroken Device (JOI17_broken_device)C++14
100 / 100
52 ms3208 KiB
#include <bits/stdc++.h> using namespace std; #define ANNACPP ANNACPP // #define BRUNOCPP BRUNOCPP #ifdef WEEE #define ANNACPP ANNACPP #define BRUNOCPP BRUNOCPP int mc[150]; int gf[150]; void Set(int pos, int val) { if(gf[pos] && val) { cout << "[]!" << endl; exit(0); } mc[pos] = val; } #endif #ifdef ANNACPP #ifndef WEEE #include "Annalib.h" #endif void Anna(int n, long long x, int k, int p[]) { vector<int> v, g; g.resize(n, 0); for(int i = 0; i < k; ++i) { g[p[i]] = 1; } int bt = 0; for(int i = 0; i < n; i += 3) { int jg = g[i] + g[i + 1] + g[i + 2]; if(jg >= 2 || bt > 60) { v.push_back(0); v.push_back(0); v.push_back(0); } else if(jg == 0) { int tx = (((x & (1ll << bt)) << 1) | ((x & (1ll << (bt + 1))) >> 1)) >> bt; bt += 2; if(tx == 0) { v.push_back(0); v.push_back(0); v.push_back(1); } else if(tx == 1) { v.push_back(1); v.push_back(0); v.push_back(1); } else if(tx == 2) { v.push_back(1); v.push_back(1); v.push_back(0); } else if(tx == 3) { v.push_back(1); v.push_back(1); v.push_back(1); } else { exit(1); } } else if(jg == 1) { int tx = (x & (1ll << bt)) >> bt; ++bt; if(tx == 0) { if(g[i + 1]) { tx = (x & (1ll << bt)) >> bt; ++bt; if(tx == 0) { v.push_back(0); v.push_back(0); v.push_back(1); } else if(tx == 1) { v.push_back(1); v.push_back(0); v.push_back(1); } else { exit(1); } } else { v.push_back(0); v.push_back(1); v.push_back(0); } } else if(tx == 1) { if(g[i]) { v.push_back(0); v.push_back(1); v.push_back(1); } else { v.push_back(1); v.push_back(0); v.push_back(0); } } else { exit(1); } } } for(int i = 0; i < n; ++i) { Set(i, v[i]); } } #endif #ifdef BRUNOCPP #ifndef WEEE #include "Brunolib.h" #endif long long Bruno(int n, int a[]) { long long x = 0; int bt = 0; for(int i = 0; i < n; i += 3) { int m = a[i] * 4 + a[i + 1] * 2 + a[i + 2]; if(m == 0); else if(m == 1) bt += 2; else if(m == 2) ++bt; else if(m == 3) x |= (1ll << bt), ++bt; else if(m == 4) x |= (1ll << bt), ++bt; else if(m == 5) ++bt, x |= (1ll << bt), ++bt; else if(m == 6) x |= (1ll << bt), bt += 2; else if(m == 7) x |= (1ll << bt), ++bt, x |= (1ll << bt), ++bt; } return x; } #endif #ifdef WEEE mt19937_64 rnd(time(NULL)); long long mx = 1000000000000000001ll; int a[150]; int main() { ios::sync_with_stdio(0); cin.tie(0); while(true) { long long x = rnd() % mx; for(int i = 0; i < 150; ++i) { gf[i] = 0; } for(int i = 0; i < 40; ++i) { a[i] = rnd() % 150; gf[a[i]] = 1; } Anna(150, x, 40, a); long long y = Bruno(150, mc); if(x != y) { cout << x << " " << y << endl; exit(0); } else { cout << "[].\n" << flush; } } return 0; } #endif
#include <bits/stdc++.h> using namespace std; // #define ANNACPP ANNACPP #define BRUNOCPP BRUNOCPP #ifdef WEEE #define ANNACPP ANNACPP #define BRUNOCPP BRUNOCPP int mc[150]; int gf[150]; void Set(int pos, int val) { if(gf[pos] && val) { cout << "[]!" << endl; exit(0); } mc[pos] = val; } #endif #ifdef ANNACPP #ifndef WEEE #include "Annalib.h" #endif void Anna(int n, long long x, int k, int p[]) { vector<int> v, g; g.resize(n, 0); for(int i = 0; i < k; ++i) { g[p[i]] = 1; } int bt = 0; for(int i = 0; i < n; i += 3) { int jg = g[i] + g[i + 1] + g[i + 2]; if(jg >= 2 || bt > 60) { v.push_back(0); v.push_back(0); v.push_back(0); } else if(jg == 0) { int tx = (((x & (1ll << bt)) << 1) | ((x & (1ll << (bt + 1))) >> 1)) >> bt; bt += 2; if(tx == 0) { v.push_back(0); v.push_back(0); v.push_back(1); } else if(tx == 1) { v.push_back(1); v.push_back(0); v.push_back(1); } else if(tx == 2) { v.push_back(1); v.push_back(1); v.push_back(0); } else if(tx == 3) { v.push_back(1); v.push_back(1); v.push_back(1); } else { exit(1); } } else if(jg == 1) { int tx = (x & (1ll << bt)) >> bt; ++bt; if(tx == 0) { if(g[i + 1]) { tx = (x & (1ll << bt)) >> bt; ++bt; if(tx == 0) { v.push_back(0); v.push_back(0); v.push_back(1); } else if(tx == 1) { v.push_back(1); v.push_back(0); v.push_back(1); } else { exit(1); } } else { v.push_back(0); v.push_back(1); v.push_back(0); } } else if(tx == 1) { if(g[i]) { v.push_back(0); v.push_back(1); v.push_back(1); } else { v.push_back(1); v.push_back(0); v.push_back(0); } } else { exit(1); } } } for(int i = 0; i < n; ++i) { Set(i, v[i]); } } #endif #ifdef BRUNOCPP #ifndef WEEE #include "Brunolib.h" #endif long long Bruno(int n, int a[]) { long long x = 0; int bt = 0; for(int i = 0; i < n; i += 3) { int m = a[i] * 4 + a[i + 1] * 2 + a[i + 2]; if(m == 0); else if(m == 1) bt += 2; else if(m == 2) ++bt; else if(m == 3) x |= (1ll << bt), ++bt; else if(m == 4) x |= (1ll << bt), ++bt; else if(m == 5) ++bt, x |= (1ll << bt), ++bt; else if(m == 6) x |= (1ll << bt), bt += 2; else if(m == 7) x |= (1ll << bt), ++bt, x |= (1ll << bt), ++bt; } return x; } #endif #ifdef WEEE mt19937_64 rnd(time(NULL)); long long mx = 1000000000000000001ll; int a[150]; int main() { ios::sync_with_stdio(0); cin.tie(0); while(true) { long long x = rnd() % mx; for(int i = 0; i < 150; ++i) { gf[i] = 0; } for(int i = 0; i < 40; ++i) { a[i] = rnd() % 150; gf[a[i]] = 1; } Anna(150, x, 40, a); long long y = Bruno(150, mc); if(x != y) { cout << x << " " << y << endl; exit(0); } else { cout << "[].\n" << flush; } } return 0; } #endif
#Verdict Execution timeMemoryGrader output
Fetching results...