Submission #596134

#TimeUsernameProblemLanguageResultExecution timeMemory
596134jophyyjhMini tetris (IOI16_tetris)C++14
100 / 100
3 ms308 KiB
/**
 * Clearly, type1 stuff can be handled effortlessly. For type 2 and 3, we can just
 * draw out a graph of configurations and consider the relationship among them. It
 * suffices to hard-code everything. Well, the coding process is indeed a bit
 * tedious.
 * 
 * Implementation 1
*/

#include <bits/stdc++.h>
#include "tetris.h"


void init(int n) {
	// well i don't have to do anything.
}

int position;
int rotation;

int state = 0;		// the state in our "configuration graph"
bool symmetry = false;

void new_figure(int figure_type) {
	if (figure_type == 1) {
		position = 0, rotation = 0;
		return;
	}

	switch (state) {
	case 1:
		if (figure_type == 3)
			position = 1, rotation = 2, state = 0;
		else
			position = 1, rotation = 0, state = 2, symmetry = false;
		break;
	case 0:
		if (figure_type == 3)
			position = 0, rotation = 0, state = 1;
		else
			position = 0, rotation = 0, state = 2, symmetry = false;
		break;
	case 2:
		if (figure_type == 3) {
			if (symmetry)
				position = 0, rotation = 3, state = 2, symmetry = false;
			else
				position = 1, rotation = 2, state = 2, symmetry = true;
		} else {
			position = (symmetry ? 0 : 2), rotation = 1, state = 3;
		}
		break;
	case 3:
		if (figure_type == 3) {
			if (symmetry)
				position = 1, rotation = 1, symmetry ^= 1;
			else
				position = 0, rotation = 0, symmetry ^= 1;
		} else {
			position = (symmetry ? 1 : 0), rotation = 0, state = 0;
		}
		break;
	}
}

int get_position() {
	return position;
}

int get_rotation() {
	return rotation;
}

#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...