Submission #1166261

#TimeUsernameProblemLanguageResultExecution timeMemory
1166261spycoderytMessage (IOI24_message)C++20
0 / 100
379 ms848 KiB
#include "message.h"
#include <bits/stdc++.h>
using namespace std;

void send_message(std::vector<bool> message, std::vector<bool> mask) {
  int x;
  vector<bool> allzero(31, 0),allone(31,1);

  for(int i = 0;i<31;i++) if(mask[i]==0){
    x=i;
    break;
  }
  for(int i = 0;i<5;i++) {
    if((1<<i)&x) send_packet(allone);
    else send_packet(allzero);
  }
  reverse(message.begin(),message.end());
  message.push_back(1);
  while(message.size() < 1025) message.push_back(0);
  reverse(message.begin(),message.end());
  int idx = 0, cnt = 0, info = 0;
  vector<bool> cur;
  while(idx < message.size()) {
    int cand = cur.size();
    if(cand == x && info < 31) {
      cur.push_back(mask[info]);
      info++;
    } else if (mask[cand]) {
      cur.push_back(0);
    } else {
      cur.push_back(message[idx++]);
    }
    if(cur.size() == 31) {
      send_packet(cur);
      cur.clear();
    }
  }
  if(cur.size()){
    while(cur.size() < 31) cur.push_back(0);
    send_packet(cur);
  }
}
bool vote(vector<bool> v) {
  int a=0,b=0;
  for(int i = 0;i<v.size();i++) {
    v[i] ? a++ : b++;
  }
  if(a > b) return 1;
  else return 0;
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> res) {
  int x = 0;
  for(int i = 0;i<5;i++) if(vote(res[i]))x |= (1<<i);
  vector<bool>mask(31,0);
  vector<bool>ans;
  for(int i = 5;i<5+31;i++) {
    mask[i]=res[i][x];
  }
  for(int i = 5;i<res.size();i++) {
    for(int j = 0;j<31;j++) if(!mask[j] && j!=x)ans.push_back(res[i][j]);
  }
  while(ans.size() > 1025)ans.pop_back();
  reverse(ans.begin(),ans.end());
  while(ans.back() == 0)ans.pop_back();
  ans.pop_back();
  reverse(ans.begin(),ans.end());
  return ans;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...