| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1330926 | attky | Data Transfer (IOI19_transfer) | C++20 | 250 ms | 1724 KiB |
#include "transfer.h"
#include <iostream>
using namespace std;
vector<int> get_attachment(vector<int> source) {
int n = 1, m = source.size(), k = 0;
if(m == 63) {
n = 64;
k = 7;
}
else {
n = 256;
k = 9;
}
vector<int> added;
int zoneSize = n;
for(int loop = 0; loop < k; ++loop) {
int i = 0, parity = 0;
bool check = true;
while(i < m) {
for(int looping = 0; looping < zoneSize; ++looping) {
if(i >= m) {
break;
}
if(check) {
if(source[i] == 1) {
parity = (parity+1)%2;
}
}
i++;
}
check = !check;
}
added.push_back(parity);
zoneSize /= 2;
}
return added;
}
vector<int> retrieve(vector<int> data) {
vector<int> source;
vector<int> addedCorr;
int m, k, n;
if(data.size() < 100) {
m = 63;
n = 64;
k = 7;
}
else {
m = 255;
n = 256;
k = 9;
}
for(int loop = 0; loop < m; ++loop) {
source.push_back(data[loop]);
}
for(int loop = 0; loop < k; ++loop) {
addedCorr.push_back(data[m+loop]);
}
vector<int> added;
int zoneSize = n;
for(int loop = 0; loop < k; ++loop) {
int i = 0, parity = 0;
bool check = true;
while(i < m) {
for(int looping = 0; looping < zoneSize; ++looping) {
if(i >= m) {
break;
}
if(check) {
if(source[i] == 1) {
parity = (parity+1)%2;
}
}
i++;
}
check = !check;
}
zoneSize /= 2;
added.push_back(parity);
}
if(added[0] == addedCorr[0]) {
return source;
}
vector<int> posCorrupted;
for(int loop = 1; loop < k; ++loop) {
posCorrupted.push_back((added[loop]+addedCorr[loop]+1)%2);
}
int pos = 0, i = 1;
while(posCorrupted.size() > 0) {
pos += posCorrupted.back() * i;
posCorrupted.pop_back();
i *= 2;
}
if(pos < m) {
source[pos] = 1 - source[pos];
}
return source;
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
