Submission #4019215


Source Code Expand

#include <algorithm>
#include <climits>
#include <complex>
#include <cstring>
#include <iostream>
#include <map>
#include <set>
#include <vector>

// using
using namespace std;

// typedef
typedef long long ll;

// define
#define ALL(c) (c).begin(), (c).end()
#define SORT(c) sort(ALL(c))
#define REVERSE(c) reverse(ALL(c))
#define UNIQ(c) unique(ALL(c))
#define FOR(i, a, b, c) for (int i = (int)(a); i < (int)(b); i += (int)(c))
#define REP(i, n) FOR(i, 0, n, 1)
#define RFOR(i, a, b, c) for (int i = (int)(a); i >= (int)(b); i -= (int)(c))
#define RREP(i, n) RFOR(i, n, 0, 1)

// functions
int ceil(int a, int b) {
    return (a + b - 1) / b;
}
int round(int a, int b) {
    return (a + b / 2) / b;
}
int gcd(int a, int b) {
    return b ? gcd(b, a % b) : a;
}
int lcm(int a, int b) {
    return a * b / gcd(a, b);
}
template <class T> bool amax(T &a, const T &b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}
template <class T> bool amin(T &a, const T &b) {
    if (b < a) {
        a = b;
        return true;
    }
    return false;
}

int b[2][3] = {}, c[3][2] = {};
const int INF = 1 << 28;

int m[3][3] = {};

int dfs(int t) {
    if (t == 9) {
        int s = 0;
        REP(i, 2) {
            REP(j, 3) {
                s += b[i][j] * (m[i][j] == m[i + 1][j] ? 1 : -1);
            }
        }
        REP(i, 3) {
            REP(j, 2) {
                s += c[i][j] * (m[i][j] == m[i][j + 1] ? 1 : -1);
            }
        }
        return -s;
    }
    int res = -INF;
    REP(i, 3) {
        REP(j, 3) {
            if (m[i][j] == 0) {
                m[i][j] = t % 2 + 1;
                amax(res, -dfs(t + 1));
                m[i][j] = 0;
            }
        }
    }
    return res;
}

// main
int main() {
    int sum = 0;
    REP(i, 2) {
        REP(j, 3) {
            cin >> b[i][j];
            sum += b[i][j];
        }
    }
    REP(i, 3) {
        REP(j, 2) {
            cin >> c[i][j];
            sum += c[i][j];
        }
    }
    int res = (sum + dfs(0)) / 2;
    cout << res << endl;
    cout << sum - res << endl;
    return 0;
}

Submission Info

Submission Time
Task C - 双子と○×ゲーム
User taka256
Language C++14 (GCC 5.4.1)
Score 100
Code Size 2210 Byte
Status AC
Exec Time 16 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 15 ms 256 KB
sample-02.txt AC 15 ms 256 KB
test-01.txt AC 15 ms 256 KB
test-02.txt AC 15 ms 256 KB
test-03.txt AC 15 ms 256 KB
test-04.txt AC 15 ms 256 KB
test-05.txt AC 16 ms 256 KB
test-06.txt AC 15 ms 256 KB
test-07.txt AC 15 ms 256 KB
test-08.txt AC 15 ms 256 KB
test-09.txt AC 15 ms 256 KB
test-10.txt AC 15 ms 256 KB
test-11.txt AC 15 ms 256 KB
test-12.txt AC 15 ms 256 KB
test-13.txt AC 15 ms 256 KB
test-14.txt AC 15 ms 256 KB
test-15.txt AC 15 ms 256 KB
test-16.txt AC 15 ms 256 KB
test-17.txt AC 15 ms 256 KB
test-18.txt AC 15 ms 256 KB
test-19.txt AC 15 ms 256 KB
test-20.txt AC 15 ms 256 KB