# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
250933 | imeimi2000 | Broken Device (JOI17_broken_device) | C++17 | 50 ms | 3568 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |