# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
557010 | cadmiumsky | Broken Device (JOI17_broken_device) | C++14 | 51 ms | 2444 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include "Annalib.h"
#include <bits/stdc++.h>
using namespace std;
deque<int> bits;
const int nmax = 205;
int occ[nmax];
vector<int> toset; //two
void myset(int val) { toset.push_back(val); }
void calc(int poz) {
int coef = (occ[poz] << 2) | (occ[poz + 1] << 1) | (occ[poz + 2]);
if(__builtin_popcount(coef) >= 2) {
myset(0);
myset(0);
myset(0);
return;
}
switch(coef) {
case 0b001: {
if(bits[0] == 0) {
//if(bits[1] == 0) // 0
myset(1),
myset(0),
myset(0);
//else // 01
//myset(1),
//myset(1),
//myset(0),
//bits.pop_front();
}
else // 1
myset(0),
myset(1),
myset(0);
break;
}
case 0b010: {
if(bits[0] == 0) // 0
myset(1),
myset(0),
myset(0);
else {
if(bits[1] == 0) // 10
myset(0),
myset(0),
myset(1);
else // 11
myset(1),
myset(0),
myset(1);
bits.pop_front();
}
break;
}
case 0b100: {
if(bits[0] == 0) // 0
myset(0),
myset(1),
myset(1);
else // 1
myset(0),
myset(1),
myset(0);
break;
}
case 0b000: {
int u = (bits[0] << 1) | bits[1];
switch(u) {
case 0b00:
myset(1),
myset(1),
myset(1);
break;
case 0b01:
myset(1),
myset(1),
myset(0);
break;
case 0b10:
myset(0),
myset(0),
myset(1);
break;
case 0b11:
myset(1),
myset(0),
myset(1);
break;
}
bits.pop_front();
}
}
bits.pop_front();
}
void Anna( int n, long long x, int k, int p[] ){
bits.clear();
toset.clear();
for(int i = 59; i >= 0; i--)
bits.push_back((x & (1LL << i)) > 0LL);
for(int i = 0; i <= 300; i++)
bits.push_back(0);
for(int i = 0; i < k; i++)
occ[p[i]] = 1;
for(int i = 0; i < n; i += 3)
calc(i);
for(int i = 0; i < n; i++)
Set(i, toset[i]);
return;
}
#include "Brunolib.h"
#include <bits/stdc++.h>
using namespace std;
string rez;
void myset(string s) { rez += s;}
vector<int> a;
void calcB(int poz) {
int coef = (a[poz] << 2) | (a[poz + 1] << 1) | a[poz + 2];
switch(coef) {
case 0b111:
myset("00");
break;
case 0b110:
myset("01");
break;
case 0b101:
myset("11");
break;
case 0b011:
myset("0");
break;
case 0b001:
myset("10");
break;
case 0b010:
myset("1");
break;
case 0b100:
myset("0");
break;
case 0b000:
break;
}
return;
}
long long Bruno( int N, int A[] ){
for(int i = 0; i < N; i++)
a.push_back(A[i]);
for(int i = 0; i < N; i += 3)
calcB(i);
long long X = 0;
//for(int i = 0; i < 60; i++)
//cerr << rez[i];
//cerr << '\n';
for(int i = 0; i < 60; i++)
X = (X << 1) + (long long)(rez[i] - '0');
a.clear();
rez = "";
return X;
}
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |