Submission #773421

#TimeUsernameProblemLanguageResultExecution timeMemory
773421rxlfd314Parrots (IOI11_parrots)C++17
81 / 100
3 ms1116 KiB
#include <bits/stdc++.h>
#include "encoder.h"
#include "encoderlib.h"
using namespace std;

static const vector<int> b[4] = {{2, 3, 3}, {1, 2, 3, 2}, {1, 1, 2, 2, 2}, {2, 2, 1, 1, 1, 1}};
static bool check(int u, vector<int> v) {
	bool ret = true;
	for (int i = 0, bsz = 0, prv = 0; i < v.size() && ret; i++) {
		bsz += v[i];
		int x = u >> 8 - bsz;
		x -= x >> v[i] << v[i];
		ret &= (v[i] == 1 ? 6|x : v[i] == 2 ? 4|x : x) >= prv;
		prv = x >= prv ? x : (4|x) >= prv ? 4|x : 6|x;
	}
	return ret;
}

void encode(int N, int *M) {
	for (int i = 0; i < N; i++) {
		vector<int> v;
		for (int j = 0; j < 4; j++) {
			if (check(M[i], b[j])) {
				v = b[j];
				break;
			}
		}
		for (int j = 0, bsz = 0, prv = 0; j < v.size(); j++) {
			bsz += v[j];
			int x = M[i] >> 8 - bsz;
			x -= x >> v[j] << v[j];
			prv = x >= prv ? x : (4|x) >= prv ? 4|x : 6|x;
			send(i << 3 | prv);
		}
	}
}
#include <bits/stdc++.h>
#include "decoder.h"
#include "decoderlib.h"
using namespace std;

static const vector<int> b[4] = {{2, 3, 3}, {1, 2, 3, 2}, {1, 1, 2, 2, 2}, {2, 2, 1, 1, 1, 1}};

void decode(int N, int L, int *X) {
	sort(X, X+L);
	for (int l = 0, r = 0; l < L && r < L; ) {
		for (; r < L && (X[r] >> 3) == (X[l] >> 3); r++);
		int v = 0;
		for (int i = l; i < r; i++) {
			v = v << b[r-l-3][i-l] | X[i] - (X[i] >> b[r-l-3][i-l] << b[r-l-3][i-l]);
		}
		output(v);
		l = r;
	}
}

Compilation message (stderr)

encoder.cpp: In function 'bool check(int, std::vector<int>)':
encoder.cpp:9:38: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    9 |  for (int i = 0, bsz = 0, prv = 0; i < v.size() && ret; i++) {
      |                                    ~~^~~~~~~~~~
encoder.cpp:11:18: warning: suggest parentheses around '-' inside '>>' [-Wparentheses]
   11 |   int x = u >> 8 - bsz;
      |                ~~^~~~~
encoder.cpp: In function 'void encode(int, int*)':
encoder.cpp:28:39: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   28 |   for (int j = 0, bsz = 0, prv = 0; j < v.size(); j++) {
      |                                     ~~^~~~~~~~~~
encoder.cpp:30:22: warning: suggest parentheses around '-' inside '>>' [-Wparentheses]
   30 |    int x = M[i] >> 8 - bsz;
      |                    ~~^~~~~

decoder.cpp: In function 'void decode(int, int, int*)':
decoder.cpp:14:34: warning: suggest parentheses around arithmetic in operand of '|' [-Wparentheses]
   14 |    v = v << b[r-l-3][i-l] | X[i] - (X[i] >> b[r-l-3][i-l] << b[r-l-3][i-l]);
      |                             ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...