Submission #1334914

#TimeUsernameProblemLanguageResultExecution timeMemory
1334914PlayVoltzMessage (IOI24_message)C++20
100 / 100
404 ms836 KiB
#include "message.h"
#include <bits/stdc++.h>
using namespace std;

#define mp make_pair
#define pii pair<int, int>
#define fi first
#define se second
#define pb push_back

void send_message(vector<bool> m, vector<bool> c){
	vector<int> id(31, 1);
	vector<vector<bool> > res(66, vector<bool>(31, 0));
	for (int i=0; i<31; ++i)if (!c[i])while (c[(i+id[i])%31])++id[i];
	m.pb(1);
	while (m.size()<1025)m.pb(0);
	for (int i=0; i<31; ++i)res[id[i]-1][i]=1;
	for (int i=0, p=0; i<66; ++i)for (int j=0; j<31; ++j)if (!c[j]&&i>=id[j])res[i][j]=m[p], ++p;
	for (auto c:res)send_packet(c);
}

vector<bool> receive_message(vector<vector<bool> > vect){
	vector<bool> ans, c(31);
	vector<int> id(31);
	for (int i=0; i<31; ++i)for (int j=0; j<31; ++j)if (vect[j][i]){
		id[i]=j+1;
		break;
	}
	for (int i=0; i<31; ++i){
		int node=i, cc=0;
		vector<bool> visited(31, 0);
		while (!visited[node])visited[node]=1, ++cc, node=(node+id[node])%31;
		if (cc==16){
			for (int i=0; i<31; ++i)c[i]=!visited[i];
			break;
		}
	}
	for (int i=0; i<66; ++i)for (int j=0; j<31; ++j)if (!c[j]&&i>=id[j])ans.pb(vect[i][j]);
	while (!ans.back())ans.pop_back();
	ans.pop_back();
	return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...