Submission #1347623

#TimeUsernameProblemLanguageResultExecution timeMemory
1347623sdkjflkjsldkfjMessage (IOI24_message)C++20
0 / 100
55 ms824 KiB
#include<bits/stdc++.h>
using namespace std;

#define pb push_back

vector<bool> receive_message(vector<vector<bool>> R){
    //get C
    int n=R.size();
    vector<bool> C,cur(31,0);
    vector<int> safe,add;
    int f=0,it=0;
    while(C.size()<31){
        auto p=R[it++];
        if(f==0){
            int cnt0=0,cnt1=0;
            for(auto u:p){
                if(u) cnt1++;
                else cnt0++;
            }
            if(cnt1>cnt0) C.pb(1);
            else C.pb(0);
            if(C.back()==0) safe.pb(C.size()-1);
            if(safe.size()==2) f=1;
        }else{
            for(auto u:safe){
                if(C.size()==31) break;
                C.pb(p[u]);
                if(!p[u]) add.pb(C.size()-1);
            }
            for(auto u:add) safe.pb(u);
            add.clear();
        }
    }
    //get M
    vector<bool> ans;
    for(int i=31;i<n-2;i++){
        for(int j=0;j<31;j++){
            if(!C[j]) ans.pb(R[i][j]);
        }
    }
    int use=0;
    for(int i=0;i<31;i++){
        if(!C[i]&&R[n-2][i]) use++;
    }
    for(int i=0;i<31&&use>0;i++){
        if(!C[i]){
            ans.pb(R[n-1][i]);
            use--;
        }
    }
    return ans;
}

vector<bool> send_packet(vector<bool> A);

void send_message(vector<bool>M,vector<bool>C){
    vector<int> safe;
    int id=0;
    vector<bool> cur(31,0);
    vector<int> add;
    int f=0;
    for(int i=0;i<31;i++){
        if(f==0){
            vector<bool> v(31,C[i]);
            send_packet(v);
            if(!C[i]) safe.pb(i);
            if(safe.size()==2) f=1;
        }else{
            cur[safe[id++]]=C[i];
            if(!C[i]) add.pb(i);
            if(id==safe.size()||i==30){
                send_packet(cur);
                cur.assign(31,0);
                for (auto u:add) safe.pb(u);
                id=0;
                add.clear();
            }
        }
    }
    //send M
    int n=M.size();
    vector<bool> send(31);
    int ind=0;
    while(ind+16<n){
        for(int i=0;i<31;i++){
            if(!C[i]){
                send[i]=M[ind];
                ind++;
            }
        }
        send_packet(send);
    }
    int tem=ind;
    for(int i=0;i<31;i++){
        if(!C[i]&&tem<M.size()){
            send[i]=1;
            tem++;
        }else send[i]=0;
    }
    send_packet(send);
    for(int i=0;i<31&&ind<M.size();i++){
        if(!C[i]){
            send[i]=M[ind];
            ind++;
        }
    }
    send_packet(send);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...