제출 #1263195

#제출 시각아이디문제언어결과실행 시간메모리
1263195SzymonKrzywdaBroken Device (JOI17_broken_device)C++20
100 / 100
20 ms1496 KiB
#include "Annalib.h" #include <vector> #include <iostream> using namespace std; void Anna( int N, long long X, int K, int P[] ){ vector<int> rozklad; for (int i = 0; i < 151; i++) { rozklad.push_back(X % 2); X /= 2; } vector<bool> wartosci(N, 0); for (int i = 0; i < K; i++) wartosci[P[i]] = 1; int akt = 0; for( int i = 0; i < N; i += 3 ){ //cout << i << ' ' << N << '\n'; int ile_z = wartosci[i] + wartosci[i + 1] + wartosci[i + 2]; if (ile_z >= 2) { Set(i, 0); Set(i + 1, 0); Set(i + 2, 0); continue; } if (ile_z == 0) { if (rozklad[akt] == 0 && rozklad[akt + 1] == 0) { Set(i, 0); Set(i + 1, 1); Set(i + 2, 0); } else if (rozklad[akt] == 0 && rozklad[akt + 1] == 1) { Set(i, 1); Set(i + 1, 1); Set(i + 2, 0); } else if (rozklad[akt] == 1 && rozklad[akt + 1] == 1) { Set(i, 1); Set(i + 1, 1); Set(i + 2, 1); } else { Set(i, 1); Set(i + 1, 0); Set(i + 2, 1); } akt += 2; } else { if (rozklad[akt] == 1) { if (wartosci[i]) { Set(i, 0); Set(i + 1, 1); Set(i + 2, 1); } else { Set(i, 1); Set(i + 1, 0); Set(i + 2, 0); } akt++; } else { if (!wartosci[i + 2]) { Set(i, 0); Set(i + 1, 0); Set(i + 2, 1); akt++; } else{ if (rozklad[akt + 1] == 0) { Set(i, 0); Set(i + 1, 1); Set(i + 2, 0); } else { Set(i, 1); Set(i + 1, 1); Set(i + 2, 0); } akt+=2; } } } } }
#include "Brunolib.h" #include <iostream> using namespace std; long long Bruno( int N, int A[] ){ long long w = 0; __int128_t akt = 1; //cout << "DUPA\n"; for (int i = 0; i < N; i += 3) { // cout << A[i] << ' ' << A[i + 1] << ' ' << A[i + 1] << '\n'; if (akt > 1e18) continue; if (A[i] == 0 && A[i + 1] == 0 && A[i + 2] == 0) {continue;} if (A[i] == 0 && A[i + 1] == 0 && A[i + 2] == 1) { akt *= 2; } if (A[i] == 0 && A[i + 1] == 1 && A[i + 2] == 0) { akt *= 4; } if (A[i] == 0 && A[i + 1] == 1 && A[i + 2] == 1) { w += akt; akt *= 2; } if (A[i] == 1 && A[i + 1] == 0 && A[i + 2] == 0) { w += akt; akt *= 2; } if (A[i] == 1 && A[i + 1] == 0 && A[i + 2] == 1) { w += akt; akt *= 4; } if (A[i] == 1 && A[i + 1] == 1 && A[i + 2] == 0) { akt *= 2; w += akt; akt *= 2; } if (A[i] == 1 && A[i + 1] == 1 && A[i + 2] == 1) { w += akt; akt *= 2; w += akt; akt *= 2; } } return (long long)w; }
#Verdict Execution timeMemoryGrader output
Fetching results...