제출 #1363394

#제출 시각아이디문제언어결과실행 시간메모리
1363394activedeltorre메시지 (IOI24_message)C++20
0 / 100
240 ms760 KiB
#include "message.h"
#include <cassert>
#include <vector>
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
std::vector<bool> send_packet(std::vector<bool> A);
vector<vector<bool>>mat;
int nxt[66];
void send_message(std::vector<bool> M, std::vector<bool> C)
{
    reverse(M.begin(),M.end());
    M.push_back(1);
    while(M.size()<1025)
    {
        M.push_back(0);
    }
    reverse(M.begin(),M.end());
    vector<int>biti;
    mat.resize(66);
    for(int i=0;i<66;i++)
    {
        mat[i].resize(31);
        for(int j=0;j<=31;j++)
        {
            mat[i][j]=0;
        }
    }
    for(int i=0;i<31;i++)
    {
        if(C[i]==0)
        {
            biti.push_back(i);
        }
    }
    biti.push_back(biti[0]+31);
    int index=0;
    for(int i=0;i<biti.size()-1;i++)
    {
        int dist=biti[i+1]-biti[i]-1;
        mat[dist][biti[i]]=1;
        for(int j=dist+1;j<66;j++)
        {
            mat[j][biti[i]]=M[index];
            index++;
        }
    }
    for(int i=0;i<66;i++)
    {
        send_packet(mat[i]);
    }
}
int bune[35];
int viz[35][2];
int dfs(int curr,int par)
{
    if(viz[curr][par]==1)
        return 0;
    viz[curr][par]=1;
    return 1+dfs(nxt[curr],par);
}
std::vector<bool> receive_message(std::vector<std::vector<bool>> R)
{
    vector<bool>msg;
    for(int i=0;i<31;i++)
    {
        int cnt=0;
        while(R[cnt][i]!=1 && cnt<=31)
        {
            cnt++;
        }
        nxt[i]=(i+cnt+1)%31;
    }
    for(int i=0;i<31;i++)
    {
        if(dfs(i,0)==16)
        {
            dfs(i,1);
            break;
        }
        else
        {
            for(int j=0;j<=30;j++)
            {
                viz[j][0]=0;
            }
        }
    }
    for(int i=0;i<31;i++)
    {
       if(viz[i][1]==1)
       {
           int diff=(nxt[i]+31-i)%31;
           for(int j=diff;j<66;j++)
           {
               msg.push_back(R[j][i]);
           }
       }
    }
    reverse(msg.begin(),msg.end());
    while(msg.back()==0)
    {
        msg.pop_back();
    }
    msg.pop_back();
    reverse(msg.begin(),msg.end());
    return msg;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…