Submission #1139022


Source Code Expand

#include <iostream>
#include <vector>
#include <random>

using namespace std;
// template for creating 2d vector
template<typename T>
vector<vector<T>> make_2d_vector(size_t rows, size_t cols, T init)
{ return vector< vector<T> >(rows, vector<T>(cols, init)); }


typedef vector< vector<int> > two_d_vector;

random_device rnd;


#define debug(x) cout << #x << "==" << x << endl;

const int inf = 100000000;

typedef long long ll;

#define N 30
auto A = make_2d_vector(30, 30, 0);

//移動4方向のベクトル
int di[4] = {1, 0, -1, 0};
int dj[4] = {0, 1,  0, -1};

typedef pair<int,int> P;

bool in_bound(P p) {
  return (p.first < N) && (0 <= p.first) && (p.second < N) && (0 <= p.second);;
}

void print_A() {
  for(int i = 0; i < N; i++) {
    for(int j = 0; j < N; j++) {
      cout << A[i][j] << " ";
    } cout << "\n";
  } cout << "\n";
}


void put(P p) {
  int i = p.first; int j = p.second;
  if( A[i][j] == 0 ) {
    return;
  }
  A[i][j] -= 1;
  cout << i+1 << " " << j+1 << "\n";
  int num = A[i][j];

  vector< P > next_cand;

  for(int k = 0; k < 4; k++) {
    int ni = i + di[k]; int nj = j + dj[k];
    P np = P(ni, nj);
    if( in_bound(np) ) {
      if( A[ni][nj] == num ) next_cand.push_back( np );
    }
  }

  if( next_cand.size() != 0 ) {
    P np = next_cand[ rnd() % next_cand.size() ];
    put( np );
  }

}

P get_max_index() {
  P max_index;
  int max_n = 0;
  for(int i = 0; i < N; i++) {
    for(int j = 0; j < N; j++) {
      int n = A[i][j];
      if(max_n < n) {
        max_index = P(i,j);
        max_n = n;
      } else if (max_n == n) {
        if( rnd() % 2 == 0 )  max_index = P(i,j);
      }
    }
  }
  return max_index;
}

int main() {
  ios::sync_with_stdio(false);

  for(int i = 0; i < N; i++) {
    for(int j = 0; j < N; j++) {
      cin >> A[i][j];
    }
  }


  while(true) {
    P mxp = get_max_index();
    if( A[mxp.first][mxp.second] == 0) { break; }
    put( mxp );
  }

  // print_A();

  return 0;
}

Submission Info

Submission Time
Task A - 高橋君の山崩しゲーム
User sadtomato
Language C++14 (Clang 3.8.0)
Score 810262
Code Size 2064 Byte
Status AC
Exec Time 2750 ms
Memory 512 KB

Judge Result

Set Name test_01 test_02 test_03 test_04 test_05 test_06 test_07 test_08 test_09 test_10
Score / Max Score 80936 / 100000 80941 / 100000 81448 / 100000 80523 / 100000 81194 / 100000 81089 / 100000 81274 / 100000 80969 / 100000 81191 / 100000 80697 / 100000
Status
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
AC × 1
Set Name Test Cases
test_01 subtask_01_01.txt
test_02 subtask_01_02.txt
test_03 subtask_01_03.txt
test_04 subtask_01_04.txt
test_05 subtask_01_05.txt
test_06 subtask_01_06.txt
test_07 subtask_01_07.txt
test_08 subtask_01_08.txt
test_09 subtask_01_09.txt
test_10 subtask_01_10.txt
Case Name Status Exec Time Memory
subtask_01_01.txt AC 2704 ms 512 KB
subtask_01_02.txt AC 2623 ms 512 KB
subtask_01_03.txt AC 2515 ms 512 KB
subtask_01_04.txt AC 2725 ms 512 KB
subtask_01_05.txt AC 2577 ms 512 KB
subtask_01_06.txt AC 2588 ms 512 KB
subtask_01_07.txt AC 2593 ms 512 KB
subtask_01_08.txt AC 2685 ms 512 KB
subtask_01_09.txt AC 2594 ms 512 KB
subtask_01_10.txt AC 2750 ms 512 KB