제출 #101873

#제출 시각아이디문제언어결과실행 시간메모리
101873hugo_pmBroken Device (JOI17_broken_device)C++17
0 / 100
72 ms3328 KiB
#include "Annalib.h" #include <cassert> typedef long long llg; const int borne = 155; int lenSeq, nbCas; bool bloque[borne]; int ret[borne]; long long nombre; void solve() { long long p3 = 1; for (int b = 1; b <= 37; ++b) p3 *= 3LL; int i = 0; for (int b = 37; b >= 0; --b) { int c = nombre/p3; nombre %= p3; p3 /= 3LL; assert(0 <= c && c <= 2); int cg = 0, cd = 1; if (c == 1) { cg = 1; cd = 0; } if (c == 2) { cg = 1; cd = 1; } while ((bloque[i] && cg) || (bloque[i+1] && cd)) ++i; if (i+1 >= lenSeq) return; ret[i] = cg; ret[i+1] = cd; i += 2; } } void Anna( int N, long long X, int K, int P[] ){ lenSeq = N; nombre = X; for (int i = 0; i < N; ++i) { bloque[i] = false; ret[i] = 0; } for (int i = 0; i < K; ++i) bloque[P[i]] = true; solve(); for (int i = 0; i < N; ++i) Set(i, ret[i]); return; }
#include "Brunolib.h" long long Bruno( int N, int A[] ){ long long X = 0; int i = 0; long long p3 = 1; for (int i = 1; i <= 37; ++i) p3 *= 3LL; for (int b = 37; b >= 0; --b) { while (A[i] == 0 && A[i+1] == 0) ++i; int cg = A[i], cd = A[i+1]; int c = 0; if (cg == 1) { if (cd == 0) c = 1; else c = 2; } X += (long long)(c) * p3; i += 2; p3 /= 3LL; } return X; }
#Verdict Execution timeMemoryGrader output
Fetching results...