답안 #1103242

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1103242 2024-10-20T15:13:23 Z aaaaaarroz 메시지 (IOI24_message) C++17
45.7493 / 100
1579 ms 1116 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<17;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==14){
			break;
		}
		if(!C[i]){
			enviar[i]=(!C[cnt+17]);
			cnt++;
		}
	}
	send_packet(enviar);
	enviar.resize(31,false);
	int bit=0;
	int sizes=M.size();
	for(int i=0;i<31;i++){
		if(C[i]){
			continue;
		}
		else{
			if(((sizes)&(1<<bit))==(1<<bit)){
				enviar[i]=1;
				//cout<<bit<<" ";
			}
			else{
				enviar[i]=0;
			}
			bit++;
		}
	}
	//cout<<"\n";
	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<17;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==14){
			break;
		}
		if(funciona[i]){
			funciona[cnt+17]=R[17][i];
			cnt++;
		}
	}
	/*
	for(bool res:R[18]){
		cout<<res<<" ";
	}
	cout<<"\n";
	*/
	int bit=0;
	int largo=0;
	for(int i=0;i<31;i++){
		if(!funciona[i]){
			continue;
		}
		else{
			if(R[18][i]==true){
				largo+=(1<<bit);
			}
			bit++;
		}
	}
	vector<bool>sec;
	for(int i=19;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:44:11: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<bool>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   44 |  while(pos<M.size()){
      |        ~~~^~~~~~~~~
message.cpp: In function 'std::vector<bool> receive_message(std::vector<std::vector<bool> >)':
message.cpp:108:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::vector<bool> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  108 |  for(int i=19;i<R.size();i++){
      |               ~^~~~~~~~~
message.cpp:115:18: warning: comparison of integer expressions of different signedness: 'std::vector<bool>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
  115 |  while(sec.size()>largo){
      |        ~~~~~~~~~~^~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 656 KB Used 20 days
# 결과 실행 시간 메모리 Grader output
1 Correct 418 ms 832 KB Used 24 days
2 Correct 389 ms 840 KB Used 23 days
3 Correct 453 ms 1092 KB Used 24 days
4 Correct 432 ms 848 KB Used 23 days
5 Correct 319 ms 848 KB Used 24 days
6 Correct 240 ms 1080 KB Used 23 days
7 Correct 244 ms 1096 KB Used 23 days
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 656 KB Used 20 days
2 Correct 418 ms 832 KB Used 24 days
3 Correct 389 ms 840 KB Used 23 days
4 Correct 453 ms 1092 KB Used 24 days
5 Correct 432 ms 848 KB Used 23 days
6 Correct 319 ms 848 KB Used 24 days
7 Correct 240 ms 1080 KB Used 23 days
8 Correct 244 ms 1096 KB Used 23 days
9 Partially correct 1537 ms 1084 KB Used 84 days
10 Partially correct 1000 ms 868 KB Used 83 days
11 Partially correct 1355 ms 1116 KB Used 84 days
12 Partially correct 1446 ms 832 KB Used 83 days
13 Partially correct 1579 ms 848 KB Used 83 days
14 Partially correct 1113 ms 860 KB Used 84 days
15 Partially correct 778 ms 1112 KB Used 84 days
16 Partially correct 1079 ms 1080 KB Used 83 days
17 Partially correct 1115 ms 852 KB Used 83 days
18 Correct 462 ms 864 KB Used 26 days
19 Correct 546 ms 832 KB Used 32 days
20 Correct 672 ms 840 KB Used 38 days
21 Correct 755 ms 1084 KB Used 45 days
22 Correct 822 ms 1088 KB Used 51 days
23 Correct 1037 ms 856 KB Used 57 days
24 Correct 1106 ms 1080 KB Used 63 days
25 Partially correct 1257 ms 828 KB Used 69 days
26 Partially correct 1281 ms 832 KB Used 76 days
27 Partially correct 1400 ms 860 KB Used 82 days
28 Partially correct 1472 ms 1116 KB Used 84 days