Submission #990666

#TimeUsernameProblemLanguageResultExecution timeMemory
990666efishelBroken Device (JOI17_broken_device)C++17
100 / 100
36 ms2748 KiB
#include "Annalib.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using vll = vector <ll>; static mt19937_64 rngA(0xccff00); void Anna (int n, ll x, int k, int p[]) { vll to(n); iota(to.begin(), to.end(), 0); shuffle(to.begin(), to.end(), rngA); vector <char> broken(n, false); for (ll i : vll(p, p+k)) broken[to[i]] = true; vll th(38, -15); for (ll i = 0; i < 38; i++) { th[i] = x%3; x /= 3; } // 00 none // 01 0 // 10 1 // 11 2 ll at = 0; ll i = 0; vll set(n, 0); for (; i < n; i += 2) { if (at == 38) break; switch (th[at]) { case 0: if (broken[i+1]) break; set[i] = 0; set[i+1] = 1; at++; break; case 1: if (broken[i]) break; set[i] = 1; set[i+1] = 0; at++; break; case 2: if (broken[i] || broken[i+1]) break; set[i] = 1; set[i+1] = 1; at++; break; default: assert(false); } } for (ll i = 0; i < n; i++) { Set(i, set[to[i]]); } }
#include "Brunolib.h" #include <bits/stdc++.h> using namespace std; using ll = long long; using vll = vector <ll>; static mt19937_64 rngB(0xccff00); ll Bruno (int n, int a[]) { vll orig(a, a+n); vll to(n); iota(to.begin(), to.end(), 0); shuffle(to.begin(), to.end(), rngB); vll ve(n); for (ll i = 0; i < n; i++) ve[to[i]] = orig[i]; vll th(38); ll at = 0; for (ll i = 0; i < n; i += 2) { if (at == 38) break; if (ve[i] == 0 && ve[i+1] == 0) continue; th[at++] = ( ve[i] == 0 && ve[i+1] == 1 ? 0 : ve[i] == 1 && ve[i+1] == 0 ? 1 : ve[i] == 1 && ve[i+1] == 1 ? 2 : -15 ); } ll ans = 0; ll thr = 1; for (ll i = 0; i < 38; i++) { ans += th[i]*thr; thr *= 3; } cerr << ans << " ans\n"; return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...