Submission #1315368

#TimeUsernameProblemLanguageResultExecution timeMemory
1315368ezzzayMessage (IOI24_message)C++17
0 / 100
61 ms800 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);
	}
	idx.pb(idx[0]+31);
	for(int i=0;i<4;i++){
		vector<bool>v(31);
		for(int j=0;j<16;j++){
			v[idx[j]]= bool ((1<<i) & ((idx[j+1]-idx[j])%31));
		}
		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) {
	vector<int>child(31);
	for(int i=0;i<31;i++)child[i]=i;
	for(int i=0;i<4;i++){
		for(int j=0;j<31;j++){
			child[j]+= (1<<i) * R[i][j];
		}
	}
	for(int i=0;i<31;i++)child[i]%=31;
	vector<int>idx;
	for(int x=0;x<31;x++){
	    int a=x;
	    vector<int> pos(31, -1);
	    vector<int> path;
	    while(true){
	        if(a<0 || a>=31) break;
	        if(pos[a]!=-1){
	            int st=pos[a];
	            for(int t=st;t<(int)path.size();t++) idx.pb(path[t]);
	            break;
	        }
	        pos[a]=path.size();
	        path.pb(a);
	        a=child[a];
	    }
	    if(idx.size()==16) break;
	    idx.clear();
	}
	sort(idx.begin(),idx.end());
	int L=0;
	for(int i=0;i<15;i++){
		if(R[4][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+5][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...