# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1167214 | fryingduc | Broken Device (JOI17_broken_device) | C++20 | 19 ms | 1344 KiB |
#include "Annalib.h"
#include "bits/stdc++.h"
using namespace std;
namespace {
string c0[] = {"001", "011", "110", "111"};
string c1[] = {"101", "010"};
// 100
const int maxn = 155;
int n, k, p[maxn];
long long x;
bool ban[maxn];
string s;
}
void Anna(int N, long long X, int K, int P[]) {
memset(ban, 0, sizeof(ban));
n = N, x = X, k = K;
s.clear();
for (int i = 0; i < k; ++i) {
ban[p[i]] = 1;
}
for (int i = 0; i < n; ++i) {
p[i] = P[i];
}
int bit = 59;
for (int i = 0; i < n; i += 3) {
if (bit < 0) {
for (int j = i; j < n; ++j) {
s += '0';
}
break;
}
int cnt = 0;
for (int j = i; j <= i + 2; ++j) cnt += ban[j];
if (cnt > 1) {
s += "000";
continue;
}
if (cnt == 0 and bit >= 1) {
int cur = ((x >> bit & 1) << 1) | (x >> (bit - 1) & 1);
bit -= 2;
s += c0[cur];
} else {
if (x >> bit & 1) {
s += c1[ban[i]];
--bit;
} else {
if (!ban[i]) {
s += "100";
--bit;
} else {
int b = (bit == 0 ? 0 : (x >> (bit - 1) & 1));
bit -= 2;
s += c0[b];
}
}
}
}
assert((int)s.size() == 150);
for (int i = 0; i < n; ++i) {
Set(i, s[i] - '0');
}
}
#include "Brunolib.h"
#include "bits/stdc++.h"
using namespace std;
namespace {
string cc0[] = {"001", "011", "110", "111"};
string cc1[] = {"101", "010"};
// 100
}
long long Bruno (int N, int A[]) {
string s;
for (int i = 0; i < N; i += 3) {
string x;
x += char('0' + A[i]);
x += char('0' + A[i + 1]);
x += char('0' + A[i + 2]);
if (x == "000") continue;
int p = -1;
for (int j = 0; j < 4; ++j) {
if (x == cc0[j]) {
p = j; break;
}
}
if (p != -1) {
s += char('0' + (p & 1));
s += char('0' + (p >> 1));
continue;
}
for (int j = 0; j < 2; ++j) {
if (x == cc1[j]) {
s += "1";
p = j;
break;
}
}
if (p == -1) {
s += "0";
}
}
long long res = 0;
for (int j = 0; j < 60; ++j) {
if (s[j] == '1') res |= (1ll << (60 - j));
}
return res;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |