Submission #3975130
Source Code Expand
#include <algorithm> #include <bitset> #include <cctype> #include <cmath> #include <cstdio> #include <cstring> #include <deque> #include <fstream> #include <functional> #include <iostream> #include <limits> #include <map> #include <numeric> #include <queue> #include <set> #include <vector> using namespace std; using ll = long long; #define fst first #define snd second /* clang-format off */ template <class T, size_t D> struct _vec { using type = vector<typename _vec<T, D - 1>::type>; }; template <class T> struct _vec<T, 0> { using type = T; }; template <class T, size_t D> using vec = typename _vec<T, D>::type; template <class T> vector<T> make_v(size_t size, const T& init) { return vector<T>(size, init); } template <class... Ts> auto make_v(size_t size, Ts... rest) { return vector<decltype(make_v(rest...))>(size, make_v(rest...)); } /* clang-format on */ const int INF = 1 << 28; int a[3][3]; int b[2][3], c[3][2]; int score() { int s = 0; for (int i = 0; i < 2; i++) for (int j = 0; j < 3; j++) s += b[i][j] * (a[i][j] == a[i + 1][j] ? 1 : -1); for (int i = 0; i < 3; i++) for (int j = 0; j < 2; j++) s += c[i][j] * (a[i][j] == a[i][j + 1] ? 1 : -1); return s; } int encode() { int m = 0; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { m *= 3; m += a[i][j]; } } return m; } bool done[20000]; int dp[20000]; int dfs(int turn = 0) { int m = encode(); if (done[m]) return dp[m]; if (turn == 9) { done[m] = true; return dp[m] = -score(); } int res = -INF; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if (a[i][j] == 0) { a[i][j] = turn % 2 + 1; res = max(res, -dfs(turn + 1)); a[i][j] = 0; } } } done[m] = true; return dp[m] = res; } int main() { int s = 0; for (int i = 0; i < 2; i++) for (int j = 0; j < 3; j++) cin >> b[i][j], s += b[i][j]; for (int i = 0; i < 3; i++) for (int j = 0; j < 2; j++) cin >> c[i][j], s += c[i][j]; int d = dfs(); int x = (s + d) / 2; int y = s - x; cout << x << endl; cout << y << endl; return 0; }
Submission Info
Submission Time | |
---|---|
Task | C - 双子と○×ゲーム |
User | kroton |
Language | C++14 (GCC 5.4.1) |
Score | 100 |
Code Size | 2221 Byte |
Status | AC |
Exec Time | 2 ms |
Memory | 384 KB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 100 / 100 | ||||
Status |
|
|
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 | 2 ms | 384 KB |
sample-02.txt | AC | 2 ms | 384 KB |
test-01.txt | AC | 2 ms | 384 KB |
test-02.txt | AC | 2 ms | 384 KB |
test-03.txt | AC | 2 ms | 384 KB |
test-04.txt | AC | 2 ms | 384 KB |
test-05.txt | AC | 2 ms | 384 KB |
test-06.txt | AC | 2 ms | 384 KB |
test-07.txt | AC | 2 ms | 384 KB |
test-08.txt | AC | 2 ms | 384 KB |
test-09.txt | AC | 2 ms | 384 KB |
test-10.txt | AC | 2 ms | 384 KB |
test-11.txt | AC | 2 ms | 384 KB |
test-12.txt | AC | 2 ms | 384 KB |
test-13.txt | AC | 2 ms | 384 KB |
test-14.txt | AC | 2 ms | 384 KB |
test-15.txt | AC | 2 ms | 384 KB |
test-16.txt | AC | 2 ms | 384 KB |
test-17.txt | AC | 2 ms | 384 KB |
test-18.txt | AC | 2 ms | 384 KB |
test-19.txt | AC | 2 ms | 384 KB |
test-20.txt | AC | 2 ms | 384 KB |