Submission #1103221

# Submission time Handle Problem Language Result Execution time Memory
1103221 2024-10-20T14:32:13 Z aaaaaarroz Message (IOI24_message) C++17
0 / 100
504 ms 836 KB
#include <bits/stdc++.h>
#include <bitset>
using namespace std;
vector<bool> send_packet(vector<bool> A);
void send_message(vector<bool> M, vector<bool> C){
	for(int i=0;i<24;i++){
		vector<bool>enviar(31,!C[i]);
		send_packet(enviar);
	}
	vector<bool>enviar(31,false);
	int cnt=0;
	for(int i=0;i<31;i++){
		if(cnt==7){
			break;
		}
		if(!C[i]){
			enviar[i]=(!C[cnt+24]);
			cnt++;
		}
	}
	send_packet(enviar);
	enviar.resize(31,false);
	int bit=0;
	for(int i=0;i<31;i++){
		if(C[i]){
			continue;
		}
		if((M.size())&(1<<bit)){
			enviar[i]=1;
		}
		bit++;
	}
	send_packet(enviar);
	vector<bool>envio;
	int pos=0;
	while(pos<M.size()){
		if(C[envio.size()]==0){
			envio.push_back(M[pos]);
			pos++;
		}
		else{
			envio.push_back(0);
		}
		if(envio.size()==31){
			send_packet(envio);
			envio.clear();
		}
	}
	while(envio.size()<31){
		envio.push_back(false);
		if(envio.size()==31){
			send_packet(envio);
			break;
		}
	}
}
vector<bool> receive_message(vector<vector<bool>> R){
	vector<bool>funciona(31,false);
	for(int i=0;i<24;i++){
		int votos=0;
		for(int j=0;j<31;j++){
			if(R[i][j]){
				votos++;
			}
		}
		if(votos>15){
			funciona[i]=true;
		}
	}
	int cnt=0;
	for(int i=0;i<31;i++){
		if(cnt==7){
			break;
		}
		if(funciona[i]){
			funciona[24+cnt]=R[24][i];
			cnt++;
		}
	}
	/*
	for(int i=0;i<31;i++){
		cout<<funciona[i]<<" ";
	}
	cout<<"\n";
	*/
	int bit=0;
	int largo=0;
	for(int i=0;i<31;i++){
		if(!funciona[i]){
			continue;
		}
		if(R[25][i]){
			largo+=(1<<bit);
		}
		bit++;
	}
	vector<bool>sec;
	for(int i=26;i<R.size();i++){
		for(int j=0;j<31;j++){
			if(funciona[j]){
				sec.push_back(R[i][j]);
			}
		}
	}
	while(sec.size()>largo){
		sec.pop_back();
	}
	return sec;
}

/*
namespace {
const int PACKET_SIZE = 31;
const int CALLS_CNT_LIMIT = 100;

int calls_cnt;
std::vector<bool> C(PACKET_SIZE);
std::vector<std::vector<bool>> R;

void quit(const char* message) {
  printf("%s\n", message);
  exit(0);
}

void run_scenario() {
  R.clear();
  calls_cnt = 0;

  int S;
  assert(1 == scanf("%d", &S));
  std::vector<bool> M(S);
  for (int i = 0; i < S; i++) {
    int bit;
    assert(1 == scanf("%d", &bit));
    assert((bit == 0) || (bit == 1));
    M[i] = bit;
  }

  for (int i = 0; i < PACKET_SIZE; i++) {
    int bit;
    assert(1 == scanf("%d", &bit));
    assert((bit == 0) || (bit == 1));
    C[i] = bit;
  }

  send_message(M, C);
  std::vector<bool> D = receive_message(R);

  int K = (int)R.size();
  int L = (int)D.size();
  printf("%d %d\n", K, L);
  for (int i = 0; i < L; i++)
    printf("%s%d", (i == 0 ? "" : " "), (D[i] ? 1 : 0));
  printf("\n");
}

std::vector<bool> taint(const std::vector<bool>& A) {
  std::vector<bool> B = A;
  bool bit = 0;
  for (int i = 0; i < PACKET_SIZE; i++)
    if (C[i] == 1) {
      B[i] = bit;
      bit = !bit;
    }
  return B;
}

} // namespace

std::vector<bool> send_packet(std::vector<bool> A) {
  calls_cnt++;
  if (calls_cnt > CALLS_CNT_LIMIT)
    quit("Too many calls");
  if ((int)A.size() != PACKET_SIZE)
    quit("Invalid argument");

  std::vector<bool> B = taint(A);
  R.push_back(B);
  return B;
}

int main() {
  int T;
  assert(1 == scanf("%d", &T));
  for (int i = 1; i <= T; i++)
    run_scenario();
}
*/

Compilation message

message.cpp: In function 'void send_message(std::vector<bool>, std::vector<bool>)':
message.cpp:36:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<bool>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   36 |  while(pos<M.size()){
      |        ~~~^~~~~~~~~
message.cpp: In function 'std::vector<bool> receive_message(std::vector<std::vector<bool> >)':
message.cpp:98:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<bool> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   98 |  for(int i=26;i<R.size();i++){
      |               ~^~~~~~~~~
message.cpp:105:18: warning: comparison of integer expressions of different signedness: 'std::vector<bool>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  105 |  while(sec.size()>largo){
      |        ~~~~~~~~~~^~~~~~
# Verdict Execution time Memory Grader output
1 Correct 2 ms 836 KB Used 27 days
# Verdict Execution time Memory Grader output
1 Incorrect 504 ms 420 KB decoded message is incorrect
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 2 ms 836 KB Used 27 days
2 Incorrect 504 ms 420 KB decoded message is incorrect
3 Halted 0 ms 0 KB -