Submission #1227421

#TimeUsernameProblemLanguageResultExecution timeMemory
1227421PVM_pvm메시지 (IOI24_message)C++20
40.65 / 100
423 ms876 KiB
#include "message.h"
#include<bits/stdc++.h>
using namespace std;
long long tqh[35]=
{1238156781,1553595217,220122986,1043550185,1140291270,1129418547,588665037,1715240117,1619907768,872449148,1519089529,1801415513,984944522,125192184,2010740130,1751651566,1999382452,1797746124,409795366,907732332,446657554,1224632557,143630265,1913321333,325636506,808621409,1685659021,946336090,109250247,136127090,60716195,592898000,2000198890,1934480790,2035645103};

void send_message(vector<bool> M, vector<bool> C) {
    srand(167);
    vector<bool> razkrit(31);
    for (int q=0;q<31;q++) razkrit[q]=!C[q];
    int klk=16;
    int prv;
    int vtr;
    for (int w=0;w<35;w++)
    {
        vector<bool> msg(31);
        int tt=rand()%2;
        if (tt==0) vtr=w;
        for (int q=0;q<31;q++)
        {
            if (C[q])
            {
                if (w==prv) msg[q]=(tqh[w]>>q)%2;
                else if (w==vtr) msg[q]=1-(tqh[w]>>q)%2;
                else msg[q]=rand()%2;
            }
            else
            {
                int klk=(tqh[w]>>q)%2;
                msg[q]=klk;
            }
        }
        vector<bool> rsp=send_packet(msg);
        for (int q=0;q<31;q++)
        {
            if (rsp[q]!=((tqh[w]>>q)%2))
            {
                if (razkrit[q]) continue;
                razkrit[q]=1;
                klk++;
            }
        }
        if (klk==31) {
            //cerr<<w<<" s\n";
            break;
        }
    }
    int len=M.size();
    int br=0;
    vector<bool> dylz(31);
    for (int q=0;q<31;q++)
    {
        if (C[q]) dylz[q]=0;
        else
        {
            dylz[q]=len%2;
            len/=2;
        }
    }
    send_packet(dylz);
    len=M.size();
    for (int cur=0;cur<len;)
    {
        vector<bool> syob(31);
        for (int q=0;q<31;q++)
        {
            if (C[q]) syob[q]=0;
            else
            {
                if (cur==len) syob[q]=0;
                else
                {
                    syob[q]=M[cur];
                    cur++;
                }
            }
        }
        send_packet(syob);
    }
}

vector<bool> receive_message(vector<vector<bool>> R) {
    vector<bool> otg;
    vector<bool> razkrit(31);
    int klk=0;
    int sl;
    for (int w=0;w<35;w++)
    {
        for (int q=0;q<31;q++)
        {
            if (R[w][q]!=((tqh[w]>>q)%2))
            {
                if (razkrit[q]) continue;
                razkrit[q]=1;
                klk++;
            }
        }
        if (klk==15)
        {
            sl=w+1;
            //cerr<<w<<" r\n";
            break;
        }
    }
    int dlz=0;
    int br=0;
    for (int q=0;q<31;q++)
    {
        if (razkrit[q]) continue;
        dlz+=R[sl][q]*(1<<br);
        br++;
    }
    //cout<<dlz<<" e dylg\n";
    int cur=0;
    for (int w=sl+1;w<R.size();w++)
    {
        for (int q=0;q<31;q++)
        {
            if (razkrit[q]) continue;
            if (cur==dlz) continue;
            otg.push_back(R[w][q]);
            cur++;
        }
    }
    return otg;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...