# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
785772 | MilosMilutinovic | Broken Device (JOI17_broken_device) | C++14 | 0 ms | 0 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "Annalib.h"#include <bits/stdc++.h>using namespace std;string str[] = {"0", "0", "1", "00", "10", "11", "0", "01"};bool bad[200];int cnt;void Anna(int N, long long X, int K, int P[]) { cnt = 0; for (int i = 0; i < N; i++) bad[i] = false; for (int i = 0; i < K; i++) bad[P[i]] = true; long long ptr = 0; for (int i = 0; i < N; i += 3) { int cnt = bad[i] + bad[i + 1] + bad[i + 2]; if (cnt >= 2 || ptr >= 64) { Set(i, 0); Set(i + 1, 0); Set(i + 2, 0); continue; } if (cnt == 0) { bool found = false; for (int j = 1; j <= 7; j++) { if (str[j].size() == 1) { continue; } int bit0 = (X >> ptr & 1); int bit1 = (X >> (ptr + 1) & 1); if ((str[j][0] - '0') == bit0 && (str[j][1] - '0') == bit1) { Set(i, j >> 2 & 1); Set(i + 1, j >> 1 & 1); Set(i + 2, j >> 0 & 1); found = true; break; } } assert(found); ptr += 2; continue; } int f = (bad[i] ? 2 : (bad[i + 1] ? 1 : 0)); bool found = false; for (int j = 1; j <= 7; j++) { if (j >> f & 1) { continue; } bool ok = true; for (int k = 0; k < (int) str[j].size(); k++) { int bit = (X >> (ptr + k) & 1); if (bit != (str[j][k] - '0')) { ok = false; } } if (ok) { found = true; Set(i, j >> 2 & 1); Set(i + 1, j >> 1 & 1); Set(i + 2, j >> 0 & 1); ptr += str[j].size(); break; } } assert(found); } assert(cnt == #include <bits/stdc++.h>using namespace std;string str[] = {"0", "0", "1", "00", "10", "11", "0", "01"};bool bad[200];int cnt;void Anna(int N, long long X, int K, int P[]) { cnt = 0; for (int i = 0; i < N; i++) bad[i] = false; for (int i = 0; i < K; i++) bad[P[i]] = true; long long ptr = 0; for (int i = 0; i < N; i += 3) { int cnt = bad[i] + bad[i + 1] + bad[i + 2]; if (cnt >= 2 || ptr >= 64) { Set(i, 0); Set(i + 1, 0); Set(i + 2, 0); continue; } if (cnt == 0) { bool found = false; for (int j = 1; j <= 7; j++) { if (str[j].size() == 1) { continue; } int bit0 = (X >> ptr & 1); int bit1 = (X >> (ptr + 1) & 1); if ((str[j][0] - '0') == bit0 && (str[j][1] - '0') == bit1) { Set(i, j >> 2 & 1); Set(i + 1, j >> 1 & 1); Set(i + 2, j >> 0 & 1); found = true; break; } } assert(found); ptr += 2; continue; } int f = (bad[i] ? 2 : (bad[i + 1] ? 1 : 0)); bool found = false; for (int j = 1; j <= 7; j++) { if (j >> f & 1) { continue; } bool ok = true; for (int k = 0; k < (int) str[j].size(); k++) { int bit = (X >> (ptr + k) & 1); if (bit != (str[j][k] - '0')) { ok = false; } } if (ok) { found = true; Set(i, j >> 2 & 1); Set(i + 1, j >> 1 & 1); Set(i + 2, j >> 0 & 1); ptr += str[j].size(); break; } } assert(found); } assert(cnt == #include <bits/stdc++.h>using namespace std;string str[] = {"0", "0", "1", "00", "10", "11", "0", "01"};bool bad[200];int cnt;void Anna(int N, long long X, int K, int P[]) { cnt = 0; for (int i = 0; i < N; i++) bad[i] = false; for (int i = 0; i < K; i++) bad[P[i]] = true; long long ptr = 0; for (int i = 0; i < N; i += 3) { int cnt = bad[i] + bad[i + 1] + bad[i + 2]; if (cnt >= 2 || ptr >= 64) { Set(i, 0); Set(i + 1, 0); Set(i + 2, 0); continue; } if (cnt == 0) { bool found = false; for (int j = 1; j <= 7; j++) { if (str[j].size() == 1) { continue; } int bit0 = (X >> ptr & 1); int bit1 = (X >> (ptr + 1) & 1); if ((str[j][0] - '0') == bit0 && (str[j][1] - '0') == bit1) { Set(i, j >> 2 & 1); Set(i + 1, j >> 1 & 1); Set(i + 2, j >> 0 & 1); found = true; break; } } assert(found); ptr += 2; continue; } int f = (bad[i] ? 2 : (bad[i + 1] ? 1 : 0)); bool found = false; for (int j = 1; j <= 7; j++) { if (j >> f & 1) { continue; } bool ok = true; for (int k = 0; k < (int) str[j].size(); k++) { int bit = (X >> (ptr + k) & 1); if (bit != (str[j][k] - '0')) { ok = false; } } if (ok) { found = true; Set(i, j >> 2 & 1); Set(i + 1, j >> 1 & 1); Set(i + 2, j >> 0 & 1); ptr += str[j].size(); break; } } assert(found); } assert(cnt == N#include <bits/stdc++.h>using namespace std;string str[] = {"0", "0", "1", "00", "10", "11", "0", "01"};bool bad[200];int cnt;void Anna(int N, long long X, int K, int P[]) { cnt = 0; for (int i = 0; i < N; i++) bad[i] = false; for (int i = 0; i < K; i++) bad[P[i]] = true; long long ptr = 0; for (int i = 0; i < N; i += 3) { int cnt = bad[i] + bad[i + 1] + bad[i + 2]; if (cnt >= 2 || ptr >= 64) { Set(i, 0); Set(i + 1, 0); Set(i + 2, 0); continue; } if (cnt == 0) { bool found = false; for (int j = 1; j <= 7; j++) { if (str[j].size() == 1) { continue; } int bit0 = (X >> ptr & 1); int bit1 = (X >> (ptr + 1) & 1); if ((str[j][0] - '0') == bit0 && (str[j][1] - '0') == bit1) { Set(i, j >> 2 & 1); Set(i + 1, j >> 1 & 1); Set(i + 2, j >> 0 & 1); found = true; break; } } assert(found); ptr += 2; continue; } int f = (bad[i] ? 2 : (bad[i + 1] ? 1 : 0)); bool found = false; for (int j = 1; j <= 7; j++) { if (j >> f & 1) { continue; } bool ok = true; for (int k = 0; k < (int) str[j].size(); k++) { int bit = (X >> (ptr + k) & 1); if (bit != (str[j][k] - '0')) { ok = false; } } if (ok) { found = true; Set(i, j >> 2 & 1); Set(i + 1, j >> 1 & 1); Set(i + 2, j >> 0 & 1); ptr += str[j].size(); break; } } assert(found); } assert(cnt == N);}
oj.uz
SUBMISSION #785703
# Submission timeUTC+2 Handle Problem Language Result Execution time Memory
785703 2023-07-17 15:23:51 MilosMilutinovic Broken Device (JOI17_broken_device) C++14
0 / 100
#include "Brunolib.h"
#include <bits/stdc++.h>
using namespace std;
string str[] = {"0", "0", "1", "00", "10", "11", "0", "01"};
long long Bruno(int N, int A[]) {
long long bit = 0;
long long ans = 0;
for (int i = 0; i < N; i += 3) {
int x = A[i] * 4 + A[i + 1] * 2 + A[i + 2];
if (x == 0) {
continue;
}
for (int j = 0; j < (int) str[x].size(); j++) {
int d = (str[x][j] - '0');
ans += (1LL << bit) * d;
bit += 1;
}
if (bit >= 60) {
break;
}
}
return ans;
}