제출 #231581

#제출 시각아이디문제언어결과실행 시간메모리
231581syyBroken Device (JOI17_broken_device)C++17
100 / 100
52 ms3072 KiB
#include "Annalib.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define FOR(i, a, b) for(ll i = (ll)a; i <= (ll)b; i++) #define DEC(i, a, b) for(ll i = (ll)a; i >= (ll)b; i--) typedef pair<ll, ll> pi; #define f first #define s second typedef vector<ll> vi; typedef vector<pi> vpi; #define pb push_back #define all(v) v.begin(), v.end() #define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) bool res[155], no[155]; int num[55], x, val[65]; void up(ll x, ll a, ll b, ll c) { res[3*x] = a; res[3*x+1] = b; res[3*x+2] = c; } void Anna(int n, long long X, int k, int p[]){ memset(res, 0, sizeof res); memset(no, 0, sizeof no); memset(num, 0, sizeof num); memset(val, 0, sizeof val); x = 0; FOR(i, 0, 59) { val[i] = X % 2; X /= 2; } FOR(i, 0, k-1) { no[p[i]] = 1; num[p[i]/3]++; } FOR(i, 0, n/3-1) { if (x >= 60) break; if (num[i] == 0) { ll t = 2*val[x] + val[x+1]; if (t == 0) up(i, 1, 0, 0); else if (t == 1) up(i, 1, 0, 1); else if (t == 2) up(i, 0, 1, 1); else up(i, 1, 1, 1); x += 2; } else if (num[i] == 1) { if (no[3*i]) { if (val[x] == 0) up(i, 0, 1, 0); else up(i, 0, 0, 1); x++; } else if (no[3*i+1]) { if (val[x] == 1) { //1 up(i, 0, 0, 1); x++; } else if (val[x+1] == 0) { //00 up(i, 1, 0, 0); x += 2; } else if (val[x+1] == 1) { //01 up(i, 1, 0, 1); x += 2; } } else { if (val[x] == 0) up(i, 0, 1, 0); else up(i, 1, 1, 0); x++; } } } FOR(i, 0, n-1) Set(i, res[i]); }
#include "Brunolib.h" #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; #define FOR(i, a, b) for(ll i = (ll)a; i <= (ll)b; i++) #define DEC(i, a, b) for(ll i = (ll)a; i >= (ll)b; i--) typedef pair<ll, ll> pi; #define f first #define s second typedef vector<ll> vi; typedef vector<pi> vpi; #define pb push_back #define all(v) v.begin(), v.end() #define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) string ans; ll v; string tos[] = {"", "1", "0", "10", "00", "01", "1", "11"}; long long Bruno(int n, int arr[] ){ ans = ""; v = 0ll; FOR(i, 0, n/3-1) { int t = 4*arr[3*i] + 2*arr[3*i+1] + arr[3*i+2]; if (t == 0) continue; ans += tos[t]; } FOR(i, 0, ans.length()-1) { if (ans[i] == '1') v += ((ll) (1ll<<i)); } return v; }
#Verdict Execution timeMemoryGrader output
Fetching results...