Submission #308006

# Submission time Handle Problem Language Result Execution time Memory
308006 2020-09-29T18:01:00 Z kimjg1119 Data Transfer (IOI19_transfer) C++17
100 / 100
295 ms 2800 KB
#include "transfer.h"
#include <bits/stdc++.h>

using namespace std;

vector<int> get_attachment_sub1(vector<int> sc) {
	int a[10] = {};
	for (int i = 0; i < sc.size(); i++) {
		for (int j = 0; j < 6; j++)
			if(sc[i]) a[j] ^= (i + 1) & (1 << j);
	}
	vector<int> r;
	for (int i = 0; i < 6; i++)
		if (a[i]) r.push_back(1);
		else r.push_back(0);
	
	vector<int> at;
	for (int i = 0; i < 1; i++) {
		for (int j = 0; j < 6; j++)
			at.push_back(r[j]);
	}
	int s = 0;
	for (int i = 0; i < 6; i++) s += r[i];
	at.push_back(s % 2);
	return at;
}

vector<int> get_attachment_sub2(vector<int> sc) {
	int a[10] = {};
	for (int i = 0; i < sc.size(); i++) {
		for (int j = 0; j < 8; j++)
			if (sc[i]) a[j] ^= (i + 1) & (1 << j);
	}
	vector<int> r;
	for (int i = 0; i < 8; i++)
		if (a[i]) r.push_back(1);
		else r.push_back(0);

	vector<int> at;
	for (int i = 0; i < 1; i++) {
		for (int j = 0; j < 8; j++)
			at.push_back(r[j]);
	}
	int s = 0;
	for (int i = 0; i < 8; i++) s += r[i];
	at.push_back(s % 2);
	return at;
}

std::vector<int> get_attachment(std::vector<int> source) {
	if (source.size() == 63) return get_attachment_sub1(source);
	else return get_attachment_sub2(source);
}

vector<int> retrieve_sub1(vector<int> d) {
	vector<int> t1;
	for (int i = 0; i < 7; i++) t1.push_back(d[i+63]);
	for (int i = 0; i < 7; i++) d.pop_back();
	int p = t1.back(); t1.pop_back();

	bool flag = true; int ts = 0;
	for (int i = 0; i < 6; i++) ts += t1[i];
	if (ts % 2 != p) flag = false;

	if (flag) {
		int a[10] = {};
		for (int i = 0; i < d.size(); i++) {
			for (int j = 0; j < 6; j++)
				if (d[i]) a[j] ^= (i+1) & (1 << j);
		}
		int r = 0;
		for (int i = 0; i < 6; i++) a[i] ^= t1[i] * (1<<i);
		for (int i = 0; i < 6; i++)
			if (a[i]) r |= (1 << i);
		if (r > 0) d[r - 1] = 1 - d[r - 1];
		return d;
	}
	else return d;
}

vector<int> retrieve_sub2(vector<int> d) {
	vector<int> t1;
	for (int i = 0; i < 9; i++) t1.push_back(d[i + 255]);
	for (int i = 0; i < 9; i++) d.pop_back();
	int p = t1.back(); t1.pop_back();

	bool flag = true; int ts = 0;
	for (int i = 0; i < 8; i++) ts += t1[i];
	if (ts % 2 != p) flag = false;

	if (flag) {
		int a[10] = {};
		for (int i = 0; i < d.size(); i++) {
			for (int j = 0; j < 8; j++)
				if (d[i]) a[j] ^= (i + 1) & (1 << j);
		}
		int r = 0;
		for (int i = 0; i < 8; i++) a[i] ^= t1[i] * (1 << i);
		for (int i = 0; i < 8; i++)
			if (a[i]) r |= (1 << i);
		if (r > 0) d[r - 1] = 1 - d[r - 1];
		return d;
	}
	else return d;
}

std::vector<int> retrieve(std::vector<int> data) {
	if (data.size() < 255) return retrieve_sub1(data);
	else return retrieve_sub2(data);
}

Compilation message

transfer.cpp: In function 'std::vector<int> get_attachment_sub1(std::vector<int>)':
transfer.cpp:8:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    8 |  for (int i = 0; i < sc.size(); i++) {
      |                  ~~^~~~~~~~~~~
transfer.cpp: In function 'std::vector<int> get_attachment_sub2(std::vector<int>)':
transfer.cpp:30:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   30 |  for (int i = 0; i < sc.size(); i++) {
      |                  ~~^~~~~~~~~~~
transfer.cpp: In function 'std::vector<int> retrieve_sub1(std::vector<int>)':
transfer.cpp:67:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   67 |   for (int i = 0; i < d.size(); i++) {
      |                   ~~^~~~~~~~~~
transfer.cpp: In function 'std::vector<int> retrieve_sub2(std::vector<int>)':
transfer.cpp:93:21: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   93 |   for (int i = 0; i < d.size(); i++) {
      |                   ~~^~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 6 ms 1036 KB Output is correct
2 Correct 6 ms 1036 KB Output is correct
3 Correct 7 ms 1140 KB Output is correct
4 Correct 7 ms 908 KB Output is correct
5 Correct 7 ms 1144 KB Output is correct
6 Correct 7 ms 1148 KB Output is correct
7 Correct 7 ms 1148 KB Output is correct
8 Correct 6 ms 1036 KB Output is correct
9 Correct 6 ms 1036 KB Output is correct
10 Correct 6 ms 908 KB Output is correct
11 Correct 6 ms 1036 KB Output is correct
12 Correct 6 ms 1036 KB Output is correct
13 Correct 6 ms 1152 KB Output is correct
14 Correct 7 ms 908 KB Output is correct
15 Correct 7 ms 1152 KB Output is correct
16 Correct 6 ms 908 KB Output is correct
17 Correct 6 ms 1156 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 237 ms 2624 KB Output is correct
2 Correct 231 ms 2496 KB Output is correct
3 Correct 240 ms 2624 KB Output is correct
4 Correct 241 ms 2496 KB Output is correct
5 Correct 274 ms 2624 KB Output is correct
6 Correct 295 ms 2660 KB Output is correct
7 Correct 249 ms 2672 KB Output is correct
8 Correct 210 ms 2664 KB Output is correct
9 Correct 195 ms 2676 KB Output is correct
10 Correct 211 ms 2496 KB Output is correct
11 Correct 194 ms 2792 KB Output is correct
12 Correct 214 ms 2800 KB Output is correct
13 Correct 221 ms 2668 KB Output is correct
14 Correct 235 ms 2624 KB Output is correct
15 Correct 232 ms 2664 KB Output is correct
16 Correct 223 ms 2680 KB Output is correct
17 Correct 217 ms 2664 KB Output is correct
18 Correct 213 ms 2660 KB Output is correct
19 Correct 211 ms 2676 KB Output is correct