Submission #1073607

#TimeUsernameProblemLanguageResultExecution timeMemory
1073607OspleiMini tetris (IOI16_tetris)C++17
46 / 100
2 ms428 KiB
#include "tetris.h"
#include <bits/stdc++.h>
 
using namespace std;
 
typedef pair<int,int> ii;
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ii> vii; 
typedef vector<vii> wgraf;
typedef pair<int,ii> edge;
typedef vector <ll> vl;
typedef pair <ll, ll> LL;
typedef vector <LL> vll;
 
#define UNVISITED 0
#define VISITED 1
#define pb push_back
#define F first
#define S second

bool libre[3], libre2[3];

void init(int n) {
  libre[0] = true;
  libre[1] = true;
  libre[2] = true;

  libre2[0] = true;
  libre2[1] = true;
  libre2[2] = true;
}

ll pos = 0, rot = 0, cnt = 0;

void new_figure(int figure_type) {

  cnt = 0;
  for (ll i = 0; i < 3; i++) if (libre[i] == true) cnt++;

  if (figure_type == 1){

    pos = 0;
    rot = 0;

  } else if (figure_type == 2){
  
    if (cnt >= 2) {
      
      if (libre[0] == true) pos = 0;
      else pos = 1;
      rot = 0;

      if (cnt == 2) {

        libre[0] = libre2[0];
        libre[1] = libre2[1];
        libre[2] = libre2[2];

        libre2[0] = true;
        libre2[1] = true;
        libre2[2] = true;

      } else {

        libre[pos] = false;
        libre[pos + 1] = false; 

      }

    } else {

      if (libre2[2] == false) {

        pos = 0;
        rot = 0;
        libre2[2] = true;

      } else if (libre2[0] == false) {

        pos = 1;
        rot = 0;
        libre2[0] = true;

      } else {
      
        if (libre[0] == true) pos = 0;
        else pos = 2;
        rot = 1;
        
        libre[0] = libre2[0];
        libre[1] = libre2[1];
        libre[2] = libre2[2];

        libre[pos] = false;
      
      }
    
    }

  } else {
    
    if (cnt == 3){

      libre2[0] = false;

      libre[0] = false;
      libre[1] = false;

      pos = 0;
      rot = 0;

    } else if (cnt == 2){

      libre[2] = false;

      libre[0] = libre2[0];
      libre[1] = libre2[1];

      libre2[0] = true;
      libre2[1] = true;

      pos = 1;
      rot = 1;

    } else {
      
      if (libre[2] == true) {

        pos = 1;
        rot = 2;
        libre[0] = libre2[0];
        libre[1] = false;
        libre[2] = false;

      } else {

        pos = 0;
        rot = 3;
        libre[0] = false;
        libre[1] = false;
        libre[2] = libre2[2];

      }

      libre2[0] = true;
      libre2[1] = true;
      libre2[2] = true;

    }
  }
}

int get_position() {
	return pos;
}

int get_rotation() {
	return rot;
}
#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...