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 |
|
|
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 |