제출 #1127189

#제출 시각아이디문제언어결과실행 시간메모리
1127189julia_08Data Transfer (IOI19_transfer)C++20
100 / 100
87 ms1744 KiB
#include "transfer.h" #include <bits/stdc++.h> using namespace std; vector<int> get_attachment(vector<int> source){ int l = 9; if(source.size() == 63) l = 7; vector<int> ans; int xor_sum = 0, x = 0; for(int i=0; i<(int) source.size(); i++){ if(source[i] == 1){ xor_sum ^= (i + 1); } } for(int i=0; i<l-1; i++){ if(xor_sum & (1 << i)){ x ^= 1; } } ans.push_back(x); // cout << "xor_sum = " << xor_sum << "\n"; for(int i=0; i<l-1; i++){ if(xor_sum & (1 << i)){ ans.push_back(1); } else ans.push_back(0); } return ans; } vector<int> retrieve(vector<int> data){ // for(auto x : data) cout << x << " "; // cout << "\n"; int l = 9; if(data.size() == 70) l = 7; vector<int> ans; int xor_sum = 0, x = 0; for(int i=data.size()-(l-1); i<data.size(); i++){ if(data[i] == 1){ xor_sum += (1 << (i - data.size() + (l - 1))); x ^= 1; } } int xor_one = 0; for(int i=0; i<data.size()-l; i++){ if(data[i] == 1){ xor_one ^= (i + 1); } } // cout << "xor_sum = " << xor_sum << "\n"; // cout << "xor_one = " << xor_one << "\n"; // cout << "x = " << x << ", data[" << data.size() - l << "] = " << data[data.size() - l] << "\n"; if(x != data[data.size() - l]){ for(int i=0; i<data.size()-l; i++){ ans.push_back(data[i]); } } else{ for(int i=0; i<data.size()-l; i++){ if((xor_one ^ xor_sum) == (i + 1)){ ans.push_back(1 - data[i]); } else ans.push_back(data[i]); } } // for(auto x : ans) cout << x << " "; // cout << "\n"; // cout << (xor_one ^ xor_sum) << "\n"; return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...