Submission #887089

# Submission time Handle Problem Language Result Execution time Memory
887089 2023-12-13T17:28:06 Z gustavo_d Parrots (IOI11_parrots) C++17
0 / 100
2 ms 1328 KB
#include "encoder.h"
#include "encoderlib.h"
#include <bits/stdc++.h>
using namespace std;

vector<int> factorize(int n) {
  vector<int> factors;
  for (int i=2; i<=n; i++) {
    if (i * i > n) {
      factors.push_back(n);
      break;
    }
    if (n % i == 0) {
      factors.push_back(i);
      n /= i;
      i--;
    }
  }
  return factors;
}

void encode(int N, int M[])
{
  vector<vector<int>> vals(N);
  for (int i=0; i<N; i++) {
    int delta = 0;
    bool done = false;
    vector<int> facs;
    while (!done) {
      if (M[i] == 0) break;
      if (M[i] == 1) {
        delta++;
      } else facs = factorize(M[i]);
      bool can = true;
      for (int f : facs) {
        if (f > 9) can = false;
      }
      if ((int)facs.size() > 10 - (delta+7)/8) can = false;
      if (can) {
        done = true;
        while (delta != 0) {
          int val = i;
          val = val << 4; // id de somar é 0
          val += min(8, delta)-1; // -1 porque o 0 não é opção
          delta -= min(8, delta);
          vals[i].push_back(val);
        }
        // manda fatores
        for (int f : facs) {
          int val = i;
          val = val << 1;
          val++; // id de fator é 1
          val = val << 3;
          val += f-2; // 0 nem 1 é fator válido, 9 é; 9-2=7 => (base 2)111
          vals[i].push_back(val);
        }
      } else {
        delta++;
        M[i]--;
      }
    }
  }
  for(int i=0; i<N; i++) {
    for (int j=0; j<(int)vals[i].size(); j++) {
      send(vals[i][j]);
    }
  }
}
#include "decoder.h"
#include "decoderlib.h"
#include <bits/stdc++.h>
using namespace std;

bool cmp(int a, int b) {
  return a > b;
}

void decode(int N, int L, int X[])
{
  sort(X, X+N, cmp); // soma > por último
  int last = 0; int act = 0;
  vector<int> vals(N, -1);
  for(int i=0; i<L; i++) {
    int id = (X[i] >> 4);
    int op = ((X[i] >> 3) & 1);
    int val = ((X[i]) & 7); // 00000111
    if (op == 0) val++;
    else val += 2;
    // cout << id << ' ' << op << ' ' << val << endl;
    if (vals[id] == -1) {
      if (op == 0) vals[id] = 0;
      else vals[id] = 1;
    }
    if (op == 0) {
      vals[id] += val;
    } else vals[id] *= val;
  }
  for (int v : vals) {
    // cout << v << endl;
    if (v == -1) output(0);
    else output(v);
  }
}

Compilation message

decoder.cpp: In function 'void decode(int, int, int*)':
decoder.cpp:13:7: warning: unused variable 'last' [-Wunused-variable]
   13 |   int last = 0; int act = 0;
      |       ^~~~
decoder.cpp:13:21: warning: unused variable 'act' [-Wunused-variable]
   13 |   int last = 0; int act = 0;
      |                     ^~~
# Verdict Execution time Memory Grader output
1 Runtime error 0 ms 800 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 1308 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 1316 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 1 ms 1308 KB Execution killed with signal 6
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Runtime error 2 ms 1328 KB Execution killed with signal 6
2 Incorrect 0 ms 788 KB Error : Bad encoded integer
3 Incorrect 0 ms 804 KB Error : Bad encoded integer
4 Incorrect 0 ms 796 KB Error : Bad encoded integer
5 Incorrect 0 ms 808 KB Error : Bad encoded integer
6 Incorrect 1 ms 796 KB Error : Bad encoded integer
7 Incorrect 0 ms 796 KB Error : Bad encoded integer