Submission #1231709

#TimeUsernameProblemLanguageResultExecution timeMemory
1231709LeonidCuk메시지 (IOI24_message)C++17
100 / 100
414 ms852 KiB
#include "message.h"
#include <bits/stdc++.h>
using namespace std;
void send_message(vector<bool> M,vector<bool> C) {

  vector<vector<bool>>res(66,vector<bool>(31));
  vector<int>koj;
  for(int i=0;i<31;i++)if(!C[i])koj.push_back(i);
  M.push_back(1);
  while(M.size()<1025)
  {
    M.push_back(0);
  }
  int l=0;
  for(int i=0;i<16;i++)
  {
    int x,a=koj[i];
    if(i!=15)x=koj[i+1]-koj[i]-1;
    else x=koj[0]+31-koj[i]-1;
    res[x][a]=1;
    for(int j=x+1;j<66;j++)
    {
      res[j][a]=M[l];l++;
    }
  }
  for(int i=0;i<66;i++)
  {
    send_packet(res[i]);
  }
}

vector<bool> receive_message(vector<vector<bool>> v) {
  vector<int>koj,dli(31);
  for(int i=0;i<31;i++)
  {
    for(int j=0;j<66;j++)
    {
      if(v[j][i])
      {
        dli[i]=j+1;break;
      }
    }
  }
  for(int i=0;i<31;i++)
  {
    int sum=1,a=(i+dli[i])%31;
    while(a!=i)
    {
      if(dli[a]==0)
      {
        sum=0;break;
      }
      if(sum>16)break;
      sum++;
      a=(a+dli[a])%31;
    }
    if(sum==16)
    {
      koj.push_back(i);
    }
  }
  vector<bool>res;
  for(int i=0;i<16;i++)
  {
    int a=koj[i];
    for(int j=dli[a];j<66;j++)
    {
      res.push_back(v[j][a]);
    }
  }
  while(res.back()==0)
  {
    res.pop_back();
  }
  res.pop_back();
  return res;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...