제출 #250933

#제출 시각아이디문제언어결과실행 시간메모리
250933imeimi2000Broken Device (JOI17_broken_device)C++17
100 / 100
50 ms3568 KiB
#include "Annalib.h" #include <stdio.h> using namespace std; typedef long long llong; void Anna(int n, llong x, int k, int p[]) { int dat[61] = {}; for (int i = 0; i < 60; ++i) { dat[i] = (x & 1ll); x >>= 1; } int broken[150] = {}; for (int i = 0; i < k; ++i) broken[p[i]] = 1; int ret[150] = {}; for (int i = 0, j = 0; j < 60; ++i) { int a = 3 * i; int b = a + 1; int c = a + 2; if (broken[a] + broken[b] + broken[c] > 1) continue; if (broken[a]) { if (dat[j]) { if (dat[j + 1]) { ret[b] = 1; ret[c] = 1; } else { ret[b] = 1; } j += 2; } else { ret[c] = 1; j += 1; } continue; } if (broken[b]) { if (dat[j]) { ret[a] = 1; } else { ret[c] = 1; } j += 1; continue; } if (broken[c]) { if (dat[j]) { ret[a] = 1; } else { ret[a] = 1; ret[b] = 1; } j += 1; continue; } int d = (dat[j] << 1 | dat[j + 1]); if (d == 0) ret[a] = 1, ret[b] = 1, ret[c] = 1; else if (d == 1) ret[a] = 1, ret[c] = 1; else if (d == 2) ret[b] = 1; else ret[b] = 1, ret[c] = 1; j += 2; } for (int i = 0; i < n; ++i) Set(i, ret[i]); }
#include "Brunolib.h" #include <vector> #include <stdio.h> using namespace std; typedef long long llong; llong Bruno(int n, int a[]) { vector<int> ret; for (int i = 0; i < 50; ++i) { int r = 0; for (int j = 0; j < 3; ++j) r = (r << 1 | a[3 * i + j]); if (r == 1) ret.push_back(0); else if (r == 2) ret.push_back(1), ret.push_back(0); else if (r == 3) ret.push_back(1), ret.push_back(1); else if (r == 4) ret.push_back(1); else if (r == 5) ret.push_back(0), ret.push_back(1); else if (r == 6) ret.push_back(0); else if (r == 7) ret.push_back(0), ret.push_back(0); } while (ret.size() > 60) ret.pop_back(); llong ans = 0; for (int i = 60; i--; ) { ans <<= 1; ans |= ret[i]; } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...