| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1311236 | putuputu | Data Transfer (IOI19_transfer) | C++20 | 79 ms | 1728 KiB |
#include "transfer.h"
#include<bits/stdc++.h>
using namespace std;
vector<int> get_attachment(vector<int> source) {
int xr=0;
vector<int>bit;
for(int i=0; i<(int)source.size(); i++){
if(source[i]==1){
xr^=(i+1);
}
}
while(xr>0){
if(xr%2==1){
bit.push_back(1);
xr=(xr-1)/2;
}else{
bit.push_back(0);
xr/=2;
}
}
int cnt1=0;
for(int i=0; i<(int)bit.size(); i++){
if(bit[i]==1){
cnt1++;
}
}
if(cnt1%2==1){
cnt1=1;
}else{
cnt1=0;
}
vector<int>ans;
//vector<int> ans=source;
for(int i=0; i<(int)bit.size(); i++){
ans.push_back(bit[i]);
}
ans.push_back(cnt1);
return ans;
}
vector<int> retrieve(vector<int> data) {
int sz=0;
if((int)data.size()<255){
sz=63;
}else{
sz=255;
}
int cnt1=0;
for(int i=sz; i<(int)data.size()-1; i++){
if(data[i]==1){
cnt1++;
}
}
vector<int> ans;
if((cnt1%2)!=data[(int)data.size()-1]){
for(int i=0; i<sz;i++){
ans.push_back(data[i]);
}
return ans;
}
int xr=0;
for(int i=0; i<sz; i++){
if(data[i]==1){
xr^=(i+1);
}
}
int xr1=0;
for(int i=0; i<(int)data.size()-1-sz; i++){
if(data[i+sz]==1){
xr1|=(1LL << i);
}
}
if(xr1==xr){
for(int i=0; i<sz; i++){
ans.push_back(data[i]);
}
return ans;
}
else{
xr^=xr1;
int idx=xr;
if(data[idx-1]==0){
data[idx-1]=1;
}else{
data[idx-1]=0;
}
for(int i=0; i<sz; i++){
ans.push_back(data[i]);
}
return ans;
}
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
