Submission #1239736

#TimeUsernameProblemLanguageResultExecution timeMemory
1239736walizamaneeMessage (IOI24_message)C++20
79.64 / 100
424 ms880 KiB
#include<bits/stdc++.h>
#include "message.h"
using namespace std;

void send_message(vector<bool> M, vector<bool> C) {
   vector<bool> hea(31 , 1);
   vector<bool> na(31 , 0);
   vector<bool> one , two;
   vector<int> kongula;
   int lol = 15;

   for( int z = 15; z <= 30; z++ ) {
      if( C[z] == 0 ) lol = z;
   }
   lol -= 15;

   for( int z = 0; z < 4; z++ ) {
      if( (lol & (1 << z)) > 0 ) {
        two = send_packet(hea);
      }
      else two = send_packet(na);
   }

   lol += 15;
   vector<vector<bool>> arr;
   kongula.clear();

   for( int z = 0; z <= 30; z++ ) {
    if( z != lol ) {
       one = hea;
       if( C[z] == 1 ) {
          one[lol] = 1;
       }
       else {
         one[lol] = 0;
        // cerr << z << "lol" << "\n";
         kongula.push_back(z);
       }
       arr.push_back(one);
    }
   }
   /* for( int z = 0; z < (int)kongula.size(); z++ ) {
      cerr << kongula[z] << " ";
    }
    cerr << lol << "\n"; */
   kongula.push_back(lol);
   
   int siz = (int)M.size();
   siz--;
  // cerr << siz << "\n";
   int here = 0;
   for( int z = 0; z < 30; z++ ) {
       if( z == 0 ) {
        for( int y = 0; y <= 9 ; y++ ) {
           if( (siz & (1 << y)) == 0 ) {
               arr[z][kongula[y]] = 0;
           }
           else  arr[z][kongula[y]] = 1;
        }
        for( int y = 10; y < 15; y++ ) {
            if( here <= siz ) {
                if( M[here] == 1 ) arr[z][kongula[y]] = 1;
                else arr[z][kongula[y]] = 0;
                here++;
            }
        }
       }
       else{
       for( int y = 0; y < 15; y++ ) {
          if( here <= siz ) {
                if( M[here] == 1 ) arr[z][kongula[y]] = 1;
                else arr[z][kongula[y]] = 0;
                here++;
          }
       }
      }
   }
   
   kongula.push_back(lol);
   sort( kongula.begin() , kongula.end() );

   while( here <= siz ) {
       one = hea;
       for( int y = 0; y < 16; y++ ) {
          if( here <= siz ) {
            if( M[here] == 1 ) one[kongula[y]] = 1;
            else one[kongula[y]] = 0;
            here++;
          } 
       }
       arr.push_back(one);
   }

   for( int z = 0; z < (int)arr.size(); z++ ) {
    two = send_packet(arr[z]);
   }

}

vector<bool> receive_message(vector<vector<bool>> R) {
    int cnt;
    int lol = 15;

    for( int z = 0; z < 4; z++ ) {
      cnt = 0;
        for( int y = 0; y < 31; y++ ) {
           if( R[z][y] == 1 ) cnt++;
        }
        if( cnt >= 16 ) {
           lol += (1 << z);
        }
    }

    vector<int> kongula;
    kongula.clear();
    int here = 0;
    for( int z = 4; z < 34; z++ ) {
        if( R[z][lol] == 0 ) {
          kongula.push_back(here);
        }
        here++;
        if( here == lol ) here++;
    }
    
    int siz = 0;
    here = 0;
    vector<bool> ans;
    ans.clear();
    for( int z = 4; z < 34; z++ ) {
      if( z == 4 ) {
          for( int y = 0; y <= 9; y++ ) {
             if( R[z][kongula[y]] == 1 ) siz += (1 << y);
          }
          for( int y = 10; y < 15; y++ ) {
             if( here <= siz ) {
                if( R[z][kongula[y]] == 1 ) ans.push_back(1);
                else ans.push_back(0);
                here++;
             }
          }
      }

      else{
          for( int y = 0; y < 15; y++ ) {
             if( here <= siz ) {
                if( R[z][kongula[y]] == 1 ) ans.push_back(1);
                else ans.push_back(0);
                here++;
             }
          }
      }
    }

    kongula.push_back(lol);
    sort( kongula.begin() , kongula.end() );

    for( int z = 34; z < (int)R.size(); z++ ) {
        for( int y = 0; y < 16; y++ ) {
           if( here <= siz ) {
                if( R[z][kongula[y]] == 1 ) ans.push_back(1);
                else ans.push_back(0);
                here++;
             }
        }
    }
   // cerr << siz << "\n";
    return ans;

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...