Submission #1052558

#TimeUsernameProblemLanguageResultExecution timeMemory
1052558PiokemonParrots (IOI11_parrots)C++17
0 / 100
25 ms1320 KiB
#include "encoder.h"
#include "encoderlib.h"
using namespace std;

#include <bits/stdc++.h>
typedef __int128 ll;

void encode(int n, int m[]){
  ll ilosc[42][34];
  //     poz ter
  for (int x=0;x<=40;x++){
    for (int y=0;y<=32;y++)ilosc[x][y]=0;
  }
  ilosc[1][0]=1;
  for (int x=1;x<=40;x++){
    for (int y=0;y<=32;y++){
      ilosc[x][y+1]+=ilosc[x][y];
      ilosc[x+1][y]+=ilosc[x][y];
    }
  }
  cerr << "TAB\n";
  for (int z=0;z<5;z++){
    for (int y=0;y<5;y++) cerr << (int)ilosc[z][y] << ' ';
    cerr << '\n';
  }
  vector<int> dupa;
  for (int blok=0;blok*8<n;blok++){
    ll wart=0;
    for (int x=0;x<8;x++){
      cerr << (int)wart << ' ' << (int)wart*256 << ' ' << m[blok*8+x] << '\n';
      if (blok*8+x>=n)wart=wart*256;
      else wart=(wart*256)+(ll)m[blok*8+x];
      cerr << "wys ";
      vector<int> tempo;
      ll kop=wart;
      while(kop){
        tempo.push_back(kop%10);
        kop/=10;
      }
      for (int y=tempo.size()-1;y>=0;y--) cerr << tempo[y];
      cout << '\n';
    }
    
    int nr=0; //rang od blok*32 do (blok+1)*32-1;
    for (int x=0;x<40;x++){
      while (nr<32 && ilosc[40-x][32-nr]<=wart){
        wart-=ilosc[40-x][32-nr];
        nr++;
      }
      dupa.push_back(nr+blok*32);
    }
  }
  for (int x:dupa) cerr << "send " << x << '\n';
  for (int x:dupa)send(x);
}
#include "decoder.h"
#include "decoderlib.h"
using namespace std;

#include <bits/stdc++.h>
typedef __int128 ll;

void decode(int n, int l, int x[])
{
  ll ilosc[42][34];
  //     poz ter
  for (int z=0;z<=40;z++){
    for (int y=0;y<=32;y++)ilosc[z][y]=0;
  }
  ilosc[1][0]=1;
  for (int z=1;z<=40;z++){
    for (int y=0;y<=32;y++){
      ilosc[z][y+1]+=ilosc[z][y];
      ilosc[z+1][y]+=ilosc[z][y];
    }
  }
  cerr << "TAB2\n";
  for (int z=0;z<5;z++){
    for (int y=0;y<5;y++) cerr << (int)ilosc[z][y] << ' ';
    cerr << '\n';
  }

  sort(x,x+l);
  vector<int> dupa2;
  for (int blok=0;blok*8<n+7;blok++){
    // bieremy papugi od blok*40 do blok*40+39
    ll wart=0;
    int nr=0;
    for (int y=0;y<40;y++){
      x[blok*40+y]-=blok*32;
      while(x[blok*40+y]>nr){
        wart+=ilosc[40-y][32-nr];
        nr++;
      }
    }
    cerr << "odeb ";
    vector<int> tempo;
    ll kop=wart;
    while(kop){
      tempo.push_back(kop%(ll)10);
      kop/=(ll)10;
    }
    for (int y=tempo.size()-1;y>=0;y--) cerr << tempo[y];
    cout << '\n';
    vector<int> temp;
    for (int y=0;y<8;y++){
      temp.push_back(wart%(ll)256);
      wart/=(ll)256;
    }
    for (int y=7;y>=0;y--)dupa2.push_back(temp[y]);
  }
  while(dupa2.size()>n)dupa2.pop_back();
  for (int y:dupa2) cerr << "out " << y << '\n';
  for (int y:dupa2) output(y);
}

Compilation message (stderr)

decoder.cpp: In function 'void decode(int, int, int*)':
decoder.cpp:57:21: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
   57 |   while(dupa2.size()>n)dupa2.pop_back();
      |         ~~~~~~~~~~~~^~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...