제출 #1155089

#제출 시각아이디문제언어결과실행 시간메모리
1155089jerzykBroken Device (JOI17_broken_device)C++20
69 / 100
19 ms1540 KiB
#include "Annalib.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define st first #define nd second typedef long long ll; typedef long double ld; const ll I = 1000'000'000'000'000'000LL; const int II = 2'000'000'000; const ll M = 1000'000'007LL; const int N = 200; const int K = 60; bool czy[N]; int ans[N]; void Anna(int _N, long long _X, int _K, int P[]) { int n = _N, k = _K; ll x = _X; for(int i = 1; i <= n; ++i) { ans[i] = 0; czy[i] = 0; } for(int i = 0; i < k; ++i) czy[P[i] + 1] = 1; vector<int> t; int il1 = 0; for(int i = 0; i < K; ++i) { int a = (bool)((1LL<<(ll)i) & x); il1 += a; t.pb(a); } if(il1 >= K / 2) t.pb(0); else t.pb(1); for(int i = 0; i < K; ++i) t[i] ^= t.back(); /*cerr << "A: \n"; for(int i = 0; i < (int)t.size(); ++i) cerr << t[i] << " "; cerr << "\n";*/ int i = 1; for(int j = 0; j < (int)t.size(); ++j) { if(t[j] == 1 && !czy[i]) { ans[i] = 1; ++i; continue; } if(t[j] == 1) ++i; while(czy[i + 1]) i += 2; ++i; ans[i] = 1; ++i; } ans[i] = 1; for(int j = 1; j <= n; ++j) { Set(j - 1, ans[j]); } }
#include "Brunolib.h" #include <bits/stdc++.h> using namespace std; #define pb push_back #define st first #define nd second typedef long long ll; typedef long double ld; const ll I = 1000'000'000'000'000'000LL; const int II = 2'000'000'000; const ll M = 1000'000'007LL; const int N = 1000'007; const int K = 60; long long Bruno( int _N, int A[]) { int n = _N, il = 0; ll ans = 0LL; vector<int> cur; for(int i = 0; i < n && (int)cur.size() <= K; ++i) { if(A[i] == 1) {cur.pb(1); continue;} ++il; if(A[i + 1] == 1) { if(il % 2 == 1) cur.pb(0); else cur.pb(1); il = 0; ++i; } } /*cerr << "B: \n"; for(int i = 0; i < (int)cur.size(); ++i) cerr << cur[i] << " "; cerr << "\n";*/ for(int i = 0; i < K; ++i) { cur[i] ^= cur.back(); ans += (1LL<<(ll)i) * (ll)cur[i]; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...