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