제출 #1315353

#제출 시각아이디문제언어결과실행 시간메모리
1315353ezzzay메시지 (IOI24_message)C++17
0 / 100
56 ms732 KiB
#include "message.h" #include<bits/stdc++.h> using namespace std; #define ff first #define ss second #define pb push_back void send_message(std::vector<bool> M, std::vector<bool> C) { vector<int>idx; for(int i=0;i<31;i++){ if(C[i]==0)idx.pb(i); //16 shirheg } idx.pb(idx[0]); for(int i=0;i<5;i++){ vector<bool>v(31); for(int j=0;j<16;j++){ v[idx[j]]= bool ((1<<i) & (idx[j+1])); } send_packet(v); } int L=M.size(); vector<bool>tmp(31); for(int i=0;i<15;i++){ if(L & (1<<i)){ tmp[idx[i]]=1; } } send_packet(tmp); for(int i=0;i<L/16;i++){ vector<bool>v(31); for(int j=0;j<16;j++){ v[idx[j]]=M[i*16+j]; } send_packet(v); } if(L%16){ vector<bool>v(31); for(int j=0;j<L%16;j++){ v[idx[j]]=M[L-L%16+j]; } send_packet(v); } } std::vector<bool> receive_message(std::vector<std::vector<bool>> R) { int P = (int)R.size(); vector<int> child(31,0); for(int t=0;t<5 && t<P;t++){ for(int j=0;j<31;j++){ if(R[t][j]) child[j] |= (1<<t); } } vector<int> vis(31,0); vector<int> idx; for(int start=0; start<31; ++start){ if(vis[start]) continue; int cur = start; unordered_map<int,int> pos; int step = 0; while(pos.find(cur) == pos.end()){ if(vis[cur]) break; pos[cur] = step++; cur = child[cur]; } if(pos.find(cur) != pos.end()){ int cycle_len = step - pos[cur]; if(cycle_len == 16){ int node = cur; for(int k=0;k<16;k++){ idx.pb(node); node = child[node]; } break; } } for(auto &p : pos) vis[p.first]=1; } if(idx.empty()) return {}; int L=0; for(int i=0;i<15;i++){ if(R[5][idx[i]])L+=(1<<i); } vector<bool>M(L); for(int i=0;i<L/16;i++){ vector<bool>v(31); for(int j=0;j<16;j++){ M[i*16+j]=R[i+6][idx[j]]; } } if(L%16){ vector<bool>v(31); for(int j=0;j<L%16;j++){ M[L-L%16+j]=R.back()[idx[j]]; } } return M; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...