# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
113462 | tincamatei | Broken Device (JOI17_broken_device) | C++14 | 7 ms | 1024 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "Annalib.h"
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 150;
bool broken[MAX_N];
int perm[MAX_N];
void makePseudoPerm() {
srand(269696969);
for(int i = 0; i < MAX_N; ++i)
perm[i] = i;
random_shuffle(perm, perm + MAX_N);
}
void Anna(int N, long long X, int k, int P[]) {
makePseudoPerm();
for(int i = 0; i < k; ++i)
broken[P[i]] = true;
for(int i = 0; i < 62; ++i)
Set(perm[i], ((1LL << i) & X) > 0);
for(int i = 62; i < N - 62 - 1; ++i) {
bool ok = true;
if(!broken[perm[i]]) {
for(int j = 0; j < 62; ++j)
if(broken[perm[j]] && broken[perm[i + j + 1]])
ok = false;
if(ok) {
Set(perm[i], true);
for(int j = 0; j < 62; ++j)
Set(perm[i + j + 1], ((1LL << j) & X) > 0);
for(int j = i + 63; j < N; ++j)
Set(perm[j], false);
return;
} else
Set(perm[i], false);
}
}
assert(false); // This should not happen
}
#include "Brunolib.h"
#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 150;
static int perm[MAX_N];
static void makePseudoPerm() {
srand(269696969);
for(int i = 0; i < MAX_N; ++i)
perm[i] = i;
random_shuffle(perm, perm + MAX_N);
}
long long Bruno(int N, int A[]) {
makePseudoPerm();
long long X = 0LL;
for(int i = 0; i < 62; ++i)
X = X | ((long long)A[perm[i]] << i);
int i = 62;
while(A[perm[i]] != 1)
++i;
i++;
for(int j = 0; j < 62; ++j)
X = X | ((long long)A[perm[i + j]] << j);
return X;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |