# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
907446 | andrey27_sm | Broken Device (JOI17_broken_device) | C++17 | 2095 ms | 600 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 <bits/stdc++.h>
#include <Annalib.h>
using namespace std;
pair<int,int> mask_to_num(int m){
if(m == 7) return {3,2};
if(m == 6) return {1,2};
if(m == 5) return {2,2};
if(m == 4) return {1,1};
if(m == 3) return {1,1};
if(m == 2) return {0,2};
if(m == 1) return {0,1};
if(m == 0) return {0,0};
}
int num_to_mask(int n){
for(int i = 1;i < 7;i++){
if(mask_to_num(i).second == 2 and mask_to_num(i).first == n) return i;
}
}
void Anna( int N, long long X, int K, int P[] ){
vector<int> L(N,-2);
stack<int> B;
while(X) B.push(X%2), X/=2;
while(B.size()%2 != 0) B.push(0);
for(int i = 0;i < K;i++) L[P[i]] = -1;
for(int i = 0;i < N;i+=3){
if(L[i]+L[i+1]+L[i+2] > -5 or B.empty()) {
Set(i,0);
Set(i+1,0);
Set(i+2,0);
continue;
}
if(L[i]+L[i+1]+L[i+2] == -6){
if(B.empty()) B.push(0);
int a = B.top();
B.pop();
if(B.empty()) B.push(0);
int b = B.top();
B.pop();
int c = num_to_mask(a*2+b);
Set(i,c/4);
Set(i+1,(c/2)%2);
Set(i+2,c%2);
}
else{
if(B.empty()) B.push(0);
int a = B.top();
B.pop();
if(a == 1 and L[i] == -2){
Set(i,1);
Set(i+1,0);
Set(i+2,0);
}
else if(a == 1){
Set(i,0);
Set(i+1,1);
Set(i+2,1);
}
else if(a == 0 and L[i+2] == -2){
Set(i,0);
Set(i+1,0);
Set(i+2,1);
}
else{
if(B.empty()) B.push(0);
int b = B.top();
B.pop();
Set(i,b);
Set(i+1,1);
Set(i+2,0);
}
}
}
}
#include <bits/stdc++.h>
#include <Brunolib.h>
using namespace std;
pair<int,int> mask_to_num(int m){
if(m == 7) return {3,2};
if(m == 6) return {1,2};
if(m == 5) return {2,2};
if(m == 4) return {1,1};
if(m == 3) return {1,1};
if(m == 2) return {0,2};
if(m == 1) return {0,1};
if(m == 0) return {0,0};
}
int num_to_mask(int n){
for(int i = 1;i < 7;i++){
if(mask_to_num(i).second == 2 and mask_to_num(i).first == n) return i;
}
}
long long Bruno( int N, int A[] ){
long long X = 0;
int cnt = 0;
for(int i = 0;i < N;i+=3){
pair<int,int> a = mask_to_num(A[i]*4+A[i+1]*2+A[i+2]);
if(a.second == 0) continue;
if(a.second == 1 and cnt < 60){
cnt++;
X = X<<1|a.first;
}
if(a.second and cnt < 59){
cnt+=2;
X = X<<2|a.first;
}
else if(a.second and cnt < 60){
cnt+=1;
X = X<<1|(a.first>>1);
}
}
return X;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |