Submission #4607917


Source Code Expand

#include <bits/stdc++.h>

#define _overload(_1,_2,_3,name,...) name
#define _rep(i,n) _range(i,0,n)
#define _range(i,a,b) for(int i=int(a);i<int(b);++i)
#define rep(...) _overload(__VA_ARGS__,_range,_rep,)(__VA_ARGS__)

#define _rrep(i,n) _rrange(i,n,0)
#define _rrange(i,a,b) for(int i=int(a)-1;i>=int(b);--i)
#define rrep(...) _overload(__VA_ARGS__,_rrange,_rrep,)(__VA_ARGS__)

#define _all(arg) begin(arg),end(arg)
#define uniq(arg) sort(_all(arg)),(arg).erase(unique(_all(arg)),end(arg))
#define getidx(ary,key) lower_bound(_all(ary),key)-begin(ary)
#define clr(a,b) memset((a),(b),sizeof(a))
#define bit(n) (1LL<<(n))
#define popcount(n) (__builtin_popcountll(n))

#define INF (1<<30)

using namespace std;

template<class T>bool chmax(T &a, const T &b) { return (a<b)?(a=b,1):0;}
template<class T>bool chmin(T &a, const T &b) { return (b<a)?(a=b,1):0;}

typedef long long ll;
typedef long double R;
const R EPS=1e-9L; // [-1000,1000]->EPS=1e-8 [-10000,10000]->EPS=1e-7
inline int sgn(const R& r){return(r > EPS)-(r < -EPS);}
inline R sq(R x){return sqrt(max(x,0.0L));}

const int dx[8]={1,0,-1,0,1,-1,-1,1};
const int dy[8]={0,1,0,-1,1,1,-1,-1};
int b[2][3], c[3][2];
int sum = 0;
int field[3][3];

int total(int field[][3]) {
  int maxi = 0;
  for(int i = 0; i < 2; ++i) {
    for(int j = 0; j < 3; ++j) {
      if(field[i][j] == field[i+1][j]) maxi += b[i][j];
    }
  }
  for(int i = 0; i < 3; ++i) {
    for(int j = 0; j < 2; ++j) {
      if(field[i][j] == field[i][j+1]) maxi += c[i][j];
    }
  }
  return maxi;
}

int solve(int field[][3], int cnt) {
  if(cnt == 9) return total(field);
  int score;
  if(cnt % 2 == 0) score = -INF;
  else score = INF;
  for(int i = 0; i < 3; ++i) {
    for(int j = 0; j < 3; ++j) {
      if(field[i][j] != -1) continue;
      if(cnt % 2 == 0) {
        field[i][j] = 1;
        score = max(score, solve(field, cnt+1));
        field[i][j] = -1;
      } else {
        field[i][j] = 0;
        score = min(score, solve(field, cnt + 1));
        field[i][j] = -1;
      }
    }
  }
  return score;
}

int main() {
  for(int i = 0; i < 2; ++i) {
    for(int j = 0; j < 3; ++j) {
      cin >> b[i][j];
      sum += b[i][j];
    }
  }
  for(int i = 0; i < 3; ++i) {
    for(int j = 0; j < 2; ++j) {
      cin >> c[i][j];
      sum += c[i][j];
    }
  }
  memset(field, -1, sizeof(field));
  int chokudai = solve(field, 0);
  cout << chokudai << endl;
  cout << sum - chokudai << endl;

  return 0;
}

Submission Info

Submission Time
Task C - 双子と○×ゲーム
User atsuyoshi
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2538 Byte
Status AC
Exec Time 27 ms
Memory 256 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 100 / 100
Status
AC × 2
AC × 24
Set Name Test Cases
Sample sample-01.txt, sample-02.txt
All sample-01.txt, sample-02.txt, 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 27 ms 256 KB
sample-02.txt AC 26 ms 256 KB
test-01.txt AC 26 ms 256 KB
test-02.txt AC 27 ms 256 KB
test-03.txt AC 26 ms 256 KB
test-04.txt AC 26 ms 256 KB
test-05.txt AC 26 ms 256 KB
test-06.txt AC 26 ms 256 KB
test-07.txt AC 27 ms 256 KB
test-08.txt AC 27 ms 256 KB
test-09.txt AC 26 ms 256 KB
test-10.txt AC 27 ms 256 KB
test-11.txt AC 27 ms 256 KB
test-12.txt AC 26 ms 256 KB
test-13.txt AC 26 ms 256 KB
test-14.txt AC 27 ms 256 KB
test-15.txt AC 26 ms 256 KB
test-16.txt AC 27 ms 256 KB
test-17.txt AC 26 ms 256 KB
test-18.txt AC 27 ms 256 KB
test-19.txt AC 27 ms 256 KB
test-20.txt AC 27 ms 256 KB