# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
469985 | Omegaman | Broken Device (JOI17_broken_device) | C++14 | 46 ms | 2740 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "Annalib.h"
#include <math.h>
bool isInArr(int ArrLen, int Arr[], int val) {
for ( int i = 0; i < ArrLen; i++ )
if (Arr[i] == val)
return true;
return false;
}
void Anna(int N, long long X, int K, int P[]){
bool d[N];
long long x = X;
for( int i = 0; i < N; i++ ){
d[i] = x % 2;
x /= 2;
}
bool F[N];
for ( int i = 0; i < N; i++ ) {
F[i] = !isInArr(K, P, i);
}
bool M[N];
int dh = 0;
for( int i = 0; i < N; i+=3) {
int m = 0;
if (dh < 60) {
int broken = (int)!F[i+0] + (int)!F[i+1] + (int)!F[i+2];
if (broken < 2) {
// [ 00 ]
if ( !d[dh] && !d[dh+1] ) {
if (F[i + 1] && F[i + 2] ) {
m = 3;
dh++;
} else {
m = 4;
}
}
// [ 01 ]
else if ( !d[dh] && d[dh+1] ) {
if (F[i + 0] && F[i + 2] ) {
m = 5;
dh++;
} else {
m = 2;
}
}
// [ 10 ]
else if ( d[dh] && !d[dh+1] ) {
if (F[i + 0] && F[i + 1] ) {
m = 6;
dh++;
} else {
m = 1;
}
}
// [ 11 ]
else if ( d[dh] && d[dh+1] ) {
if (F[i + 0] && F[i + 1] && F[i + 2] ){
m = 7;
dh++;
} else {
m = 1;
}
}
dh++;
} else if ( broken < 3 ) {
if ( d[dh] ) {
if (F[i+2]) {
m = 1;
dh++;
}
} else {
if (F[i+0]) {
m = 4;
dh++;
}
if (F[i+1]) {
m = 2;
dh++;
}
}
}
}
M[i + 2] = m % 2; m /= 2;
M[i + 1] = m % 2; m /= 2;
M[i + 0] = m % 2;
}
for ( int i = 0; i < N; i++ ) {
Set(i, (int)M[i]);
}
}
#include "Brunolib.h"
long long Bruno( int N, int A[] ) {
long long X = 0;
long long inc = 1;
int len = (N < 60 ? N : 60);
bool d[len];
for( int i = 0; i < len; i++)
d[i] = 0;
int dh = 0;
for( int i = 0; i < N; i+=3) {
int m = (int)A[i+0] * 4 + (int)A[i+1] * 2 + (int)A[i+2] * 1;
switch (m) {
case 0:
break;
case 1:
d[dh++] = 1;
break;
case 2:
d[dh++] = 0;
break;
case 3:
d[dh++] = 0;
d[dh++] = 0;
break;
case 4:
d[dh++] = 0;
break;
case 5:
d[dh++] = 0;
d[dh++] = 1;
break;
case 6:
d[dh++] = 1;
d[dh++] = 0;
break;
case 7:
d[dh++] = 1;
d[dh++] = 1;
break;
}
}
for (int i = 0; i < len; i++) {
X += inc * d[i];
inc *= 2;
}
return X;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |