CSES - Datatähti 2019 loppu - Results
Submission details
Task:Luokittelija
Sender:antti röyskö
Submission time:2019-01-17 15:50:52 +0200
Language:C++
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED19
#2ACCEPTED24
#3ACCEPTED27
#4ACCEPTED30
Test results
testverdicttimegroup
#1ACCEPTED0.02 s1details
#2ACCEPTED0.01 s2details
#3ACCEPTED0.02 s3details
#4ACCEPTED0.01 s4details

Code

#include <iostream>
#include <string>
#include <vector>
using namespace std;

vector<string> res;

void addMoves(char c) {
	string add[4] = {"?00 -> 0?0", "?01 -> 0?1", "?10 -> 1?0", "?11 -> 1?1"};
	for (int i = 0; i < 4; ++i) {
		add[i][0] = c;
		add[i][8] = c;
		res.push_back(add[i]);
	}
}
void addSwaps(char a, char b) {
	string add[2] = {"?0_ -> _0?", "?1_ -> _1?"};
	for (int i = 0; i < 2; ++i) {
		add[i][0] = a;
		add[i][2] = b;
		add[i][7] = b;
		add[i][9] = a;
		res.push_back(add[i]);
	}
}
void addEat(char a, char zt, char ot) {
	string add = "?0 -> _";

	add[0] = a;
	add[6] = zt;
	res.push_back(add);

	add[1] = '1';
	add[6] = ot;
	res.push_back(add);
}

int main() {
	int k;
	cin >> k;

	// 2 commands to move start marker to start
	res.push_back("0X -> X0");
	res.push_back("1X -> X1");

	// 16 move commands
	addMoves('A');
	addMoves('B');
	addMoves('C');
	addMoves('D');

	// 12 swap commands
	addSwaps('B', 'A');
	addSwaps('C', 'B');
	addSwaps('C', 'A');
	addSwaps('D', 'C');
	addSwaps('D', 'B');
	addSwaps('D', 'A');

	// 2 commands for building space
	if (k == 2) {
		res.push_back("X0 -> EXA");
		res.push_back("X1 -> FXA");
	} else if (k == 3) {
		res.push_back("X0 -> EXAB");
		res.push_back("X1 -> FXAB");
	} else if (k == 4) {
		res.push_back("X0 -> EXABC");
		res.push_back("X1 -> FXABC");
	} else if (k == 5) {
		res.push_back("X0 -> EXABCD");
		res.push_back("X1 -> FXABCD");
	}

	// 8 commands for eating nums
	addEat('A', 'G', 'H');
	addEat('B', 'E', 'F');
	addEat('C', 'G', 'H');
	addEat('D', 'E', 'F');

	// 2 commands to move start marker to start
	res.push_back("EX -> XE");
	res.push_back("FX -> XF");

	// 4 commands to move end marker to end
	res.push_back("YE -> EY");
	res.push_back("YF -> FY");
	res.push_back("YG -> GY");
	res.push_back("YH -> HY");

	// 8 commands for flipping
	res.push_back("EI -> IE");
	res.push_back("FI -> IF");
	res.push_back("EJ -> JE");
	res.push_back("FJ -> JF");
	res.push_back("GK -> KG");
	res.push_back("HK -> KH");
	res.push_back("GL -> LG");
	res.push_back("HL -> LH");

	// 4 commands for turning
	res.push_back("GI -> K");
	res.push_back("HJ -> L");
	res.push_back("EK -> I");
	res.push_back("FL -> J");

	// 4 commands to make end start chains
	res.push_back("EY -> IY");
	res.push_back("FY -> JY");
	res.push_back("GY -> KY");
	res.push_back("HY -> LY");

	// 4 commands to make start eat
	res.push_back("XI -> X");
	res.push_back("XJ -> X");
	res.push_back("XK -> X");
	res.push_back("XL -> X");

	// 2 commands to make start
	res.push_back("0 -> X0");
	res.push_back("1 -> X1");

	// 4 commands to make end
	res.push_back("E -> EY");
	res.push_back("F -> FY");
	res.push_back("G -> GY");
	res.push_back("H -> HY");

	// 1 command to have start eat end
	res.push_back("XY -> _");

	// Print res
	cout << res.size() << '\n';
	for (auto str : res) cout << str << '\n';
}

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
2

correct output
42
ED -> DE
FD -> DF
1DG -> DG1
GE -> EG
...

user output
73
0X -> X0
1X -> X1
A00 -> 0A0
A01 -> 0A1
...

Test 2

Group: 2

Verdict: ACCEPTED

input
3

correct output
54
ED -> DE
FD -> DF
HDG -> DGH
IDG -> DGI
...

user output
73
0X -> X0
1X -> X1
A00 -> 0A0
A01 -> 0A1
...

Test 3

Group: 3

Verdict: ACCEPTED

input
4

correct output
66
ED -> DE
FD -> DF
HDG -> DGH
IDG -> DGI
...

user output
73
0X -> X0
1X -> X1
A00 -> 0A0
A01 -> 0A1
...

Test 4

Group: 4

Verdict: ACCEPTED

input
5

correct output
78
ED -> DE
FD -> DF
HDG -> DGH
IDG -> DGI
...

user output
73
0X -> X0
1X -> X1
A00 -> 0A0
A01 -> 0A1
...