Submission #433739


Source Code Expand

#include <bits/stdc++.h>
using namespace std;

#define rep(i,n) for(int i=0;i<(n);++i)
#define loop for(;;)
#define trace(var) cerr<<">>> "<<#var<<" = "<<var<<endl;
#define inf (1e9)
#define eps (1e-9)
using Integer = long long;
using Real = long double;
const Real PI = acos(-1);

template<class S, class T> inline
ostream& operator<<(ostream&os, pair<S,T> p) {
  return os << '(' << p.first << ", " << p.second << ')';
}

template<class S, class T, class U> inline
ostream& operator<<(ostream&os, tuple<S,T,U> t) {
  return os << '('
    << get<0>(t) << ", "
    << get<1>(t) << ", "
    << get<2>(t) << ')';
}

template<class T> inline
ostream& operator<<(ostream&os, vector<T> v) {
  if (v.size() == 0) { return os << "(empty)"; }
  os << v[0];
  for (int i=1, len=v.size(); i<len; ++i) os << ' ' << v[i];
  return os;
}

template<class T> inline
istream& operator>>(istream&is, vector<T>&v) {
  rep (i, v.size()) is >> v[i];
  return is;
}

int dx[] = { -1, 0, 1, 0 };
int dy[] = {  0, -1, 0, 1 };

using vi = vector<int>;
using vvi = vector<vi>;

int a[3][3];
int b[2][3];
int c[3][2];

bool eq(int x, int y) {
  return (x != 0) and (x == y);
}

bool ne(int x, int y) {
  return (x * y == 2);
}

pair<int, int> score() {
  int x = 0;
  int y = 0;
  rep (i, 2) rep (j, 3) {
    if (eq(a[i][j], a[i+1][j])) x += b[i][j];
    else if (ne(a[i][j], a[i+1][j])) y += b[i][j];
  }
  rep (i, 3) rep (j, 2) {
    if (eq(a[i][j], a[i][j+1])) x += c[i][j];
    else if (ne(a[i][j], a[i][j+1])) y += c[i][j];
  }
  return {x,y};
}

pair<int, int> f(int mark, int cx) {
  vector<pair<int, int>> ar;
  rep (i, 3) rep (j, 3) {
    if (a[i][j] == 0) ar.push_back({ i, j });
  }
  if (ar.size() == 0) return score();

  pair<int, int> ac = { -1e7, -1e7 };

  for (auto&x: ar) {
    a[x.first][x.second] = mark;
    auto p = f(3-mark, cx+1);

    if (
        ((mark == 1) and (ac.first < p.first))
          or
        ((mark == 2) and (ac.second < p.second))
       ) {
      ac = p;
    }

    a[x.first][x.second] = 0;
  }

  return ac;
}

int main() {
  cin.tie(0);
  ios::sync_with_stdio(0);
  cout.setf(ios::fixed);
  cout.precision(10);
  random_device dev;
  mt19937 rand(dev());

  rep (i, 2) rep (j, 3)
    cin >> b[i][j];
  rep (i, 3) rep (j, 2)
    cin >> c[i][j];

  rep (i, 3) rep (j, 3)
    a[i][j] = 0;

  auto p = f(1, 0);
  cout << p.first << endl;
  cout << p.second << endl;

  return 0;
}

Submission Info

Submission Time
Task C - 双子と○×ゲーム
User cympfh
Language C++11 (GCC 4.9.2)
Score 100
Code Size 2519 Byte
Status AC
Exec Time 149 ms
Memory 932 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 2
AC × 22
Set Name Test Cases
Sample sample-01.txt, sample-02.txt
All test-01.txt, test-02.txt, test-03.txt, test-04.txt, test-05.txt, test-06.txt, test-07.txt, test-08.txt, test-09.txt, test-10.txt, test-11.txt, test-12.txt, test-13.txt, test-14.txt, test-15.txt, test-16.txt, test-17.txt, test-18.txt, test-19.txt, test-20.txt, sample-01.txt, sample-02.txt
Case Name Status Exec Time Memory
sample-01.txt AC 148 ms 904 KB
sample-02.txt AC 147 ms 804 KB
test-01.txt AC 147 ms 736 KB
test-02.txt AC 146 ms 928 KB
test-03.txt AC 147 ms 920 KB
test-04.txt AC 147 ms 792 KB
test-05.txt AC 147 ms 916 KB
test-06.txt AC 147 ms 920 KB
test-07.txt AC 147 ms 932 KB
test-08.txt AC 147 ms 928 KB
test-09.txt AC 147 ms 928 KB
test-10.txt AC 147 ms 800 KB
test-11.txt AC 145 ms 844 KB
test-12.txt AC 146 ms 800 KB
test-13.txt AC 147 ms 920 KB
test-14.txt AC 147 ms 928 KB
test-15.txt AC 148 ms 920 KB
test-16.txt AC 149 ms 800 KB
test-17.txt AC 149 ms 924 KB
test-18.txt AC 149 ms 796 KB
test-19.txt AC 145 ms 804 KB
test-20.txt AC 147 ms 752 KB