답안 #1103237

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1103237 2024-10-20T15:06:12 Z aaaaaarroz 메시지 (IOI24_message) C++17
34.9651 / 100
1647 ms 1088 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;
	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<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[cnt+24]=R[24][i];
			cnt++;
		}
	}
	/*
	for(bool res:R[25]){
		cout<<res<<" ";
	}
	cout<<"\n";
	*/
	int bit=0;
	int largo=0;
	for(int i=0;i<31;i++){
		if(!funciona[i]){
			continue;
		}
		else{
			if(R[25][i]==true){
				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: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=26;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 27 days
# 결과 실행 시간 메모리 Grader output
1 Correct 542 ms 1088 KB Used 31 days
2 Correct 487 ms 1084 KB Used 30 days
3 Correct 589 ms 848 KB Used 31 days
4 Correct 574 ms 828 KB Used 30 days
5 Correct 418 ms 1088 KB Used 31 days
6 Correct 290 ms 1080 KB Used 30 days
7 Correct 319 ms 1080 KB Used 30 days
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 656 KB Used 27 days
2 Correct 542 ms 1088 KB Used 31 days
3 Correct 487 ms 1084 KB Used 30 days
4 Correct 589 ms 848 KB Used 31 days
5 Correct 574 ms 828 KB Used 30 days
6 Correct 418 ms 1088 KB Used 31 days
7 Correct 290 ms 1080 KB Used 30 days
8 Correct 319 ms 1080 KB Used 30 days
9 Partially correct 1549 ms 1080 KB Used 91 days
10 Partially correct 1063 ms 1084 KB Used 90 days
11 Partially correct 1626 ms 852 KB Used 91 days
12 Partially correct 1571 ms 860 KB Used 90 days
13 Partially correct 1647 ms 1084 KB Used 90 days
14 Partially correct 1186 ms 860 KB Used 91 days
15 Partially correct 827 ms 1084 KB Used 91 days
16 Partially correct 1138 ms 860 KB Used 90 days
17 Partially correct 1170 ms 828 KB Used 90 days
18 Correct 565 ms 1088 KB Used 33 days
19 Correct 679 ms 836 KB Used 39 days
20 Correct 708 ms 832 KB Used 45 days
21 Correct 837 ms 1088 KB Used 52 days
22 Correct 1006 ms 856 KB Used 58 days
23 Correct 1132 ms 828 KB Used 64 days
24 Partially correct 1170 ms 824 KB Used 70 days
25 Partially correct 1282 ms 1084 KB Used 76 days
26 Partially correct 1426 ms 828 KB Used 83 days
27 Partially correct 1591 ms 1088 KB Used 89 days
28 Partially correct 1549 ms 1000 KB Used 91 days