Submission #1328344

#TimeUsernameProblemLanguageResultExecution timeMemory
1328344MateiKing80Message (IOI24_message)C++20
51.70 / 100
477 ms856 KiB
#include <bits/stdc++.h>
#include "message.h"

using namespace std;

// std::vector<bool> send_packet(std::vector<bool> A)

//de aplicat o permuatre random sau ceva la inceput
//ar trebui sa micsoreze numarul de mesaje trimise cu gen 10

void send_message(vector<bool> M, vector<bool> C) {
	vector<vector<bool>> trim(16 + (M.size() + 15) / 16, vector<bool>(31));
	vector<int> bune;
	for (int i = 0; i < 31; i ++) {
		if (!C[i]) {
			bune.push_back(i);
		}
	}
	bune.push_back(bune[0] + 31);
	for (int i = 0; i < 16; i ++) {
		trim[bune[i + 1] - bune[i] - 1][bune[i]] = 1;
	}
	int col = 0, rand = 16;
	for (auto i : M) {
		trim[rand][bune[col]] = i;
		col ++;
		if (col == 16) {
			col = 0;
			rand ++;
		}
	}
	for (auto i : trim) {
		send_packet(i);
	}
	vector<bool> last(31);
	col --;
	if (col == -1) {
		col = 15;
	}
	for (int i = 0; i <= col; i ++) {
		last[bune[i]] = 1;
	}
	send_packet(last);
}

vector<bool> receive_message(vector<vector<bool>> R) {
	vector<int> nxt(31, 0);
	for (int i = 0; i < 31; i ++) {
		for (int j = 0; j < 16; j ++) {
			if (R[j][i] == 1) {
				nxt[i] = (i + j + 1) % 31;
			}
		}
	}
	//cout << "SKIB\n";
	vector<int> bune;
	for (int i = 0; i < 31; i ++) {
		vector<int> v;
		vector<bool> viz(31, 0);
		int loc = nxt[i];
		v.push_back(i);
		viz[i] = 1;
		while (!viz[loc]) {
			v.push_back(loc);
			viz[loc] = 1;
			loc = nxt[loc];
		}
		if (v.size() == 16) {
			bune = v;
			break;
		}
	}
	sort(bune.begin(), bune.end());
	//cout << "SKIBIDI\n?";
	vector<bool> ans;
	for (int i = 16; i < (int)R.size() - 2; i ++) {
		for (auto j : bune) {
			ans.push_back(R[i][j]);
		}
	}
	for (auto j : bune) {
		if (R[R.size() - 1][j]) {
			ans.push_back(R[R.size() - 2][j]);
		}
	}
	return ans;
}




#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...