Submission #4658622


Source Code Expand

#include <iostream>
#include <string>
#include <vector>
#include <set>
#include <algorithm>
#include <cctype>
#include <cmath>
#include <queue>
#include <map>
#include <numeric>
#include <unordered_map>
#include <iomanip>
#include <functional>
#include <bitset>
#include <complex>

#define rep(i, n) for(int i = 0; i < (int)(n); i++)
#define repi(i,a,b) for(int i=int(a);i<int(b);i++)
#define all(x) (x).begin(),(x).end()

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

typedef long long ll;

using namespace std;
int flag[3][3];
using P=pair<int,int>;
vector<P>dp(1<<10,{-1,-1});
int va[2][3],vb[3][2];
P calc()
{
  int p=0,q=0;
  int a=0;
  rep(i,3)rep(j,3)a+=(1<<(i*3+j))*flag[i][j];
  if(dp[a]!=make_pair(-1,-1))return dp[a];
  rep(i,2)rep(j,3)
  {
    if(flag[i][j]==flag[i+1][j])p+=va[i][j];
    else q+=va[i][j];
  }
  rep(i,3)rep(j,2)
  {
    if(flag[i][j]==flag[i][j+1])p+=vb[i][j];
    else q+=vb[i][j];
  }
  dp[a]={p,q};
  //if(p==15&& q==80)cout<<" YES"<<endl;
  //cout<<p<<" "<<q<<endl;
  return {p,q};
}
vector<P> rec(int n=1)
{
  vector<P> resv;
  if(n==10)
  {
    resv.push_back(calc());
    return resv;
  }
  rep(i,3)rep(j,3)
  {
    if(flag[i][j]==-1)
    {
      if(n&1)
      {
        flag[i][j]=1;
        auto t=rec(n+1);
        for(auto ti:t)resv.push_back(ti);
        flag[i][j]=-1;
      }
      else
      {
        flag[i][j]=0;
        auto t=rec(n+1);
        for(auto ti:t)resv.push_back(ti);
        flag[i][j]=-1;
      }
    }
  }
  vector<P> ret;
  if(n&1)
  {
    auto maxp=-1;
    for(auto ti :resv)
    {
      if(ti.first>maxp)maxp=ti.first;
    }
    for(auto ti :resv)
    {
      if(ti.first==maxp)ret.push_back(ti);
    }
  }
  else
  {
    auto maxp=-1;
    for(auto ti :resv)
    {
      if(ti.second>maxp)maxp=ti.second;
    }
    for(auto ti :resv)
    {
      if(ti.second==maxp)ret.push_back(ti);
    }
  }
  ret.erase(unique(all(ret)),ret.end());
  return ret;
}


int main()
{
  ios::sync_with_stdio(false);
  cin.tie(0);
  rep(i,3)rep(j,3)flag[i][j]=-1;
  rep(i,2)rep(j,3)cin>>va[i][j];
  rep(i,3)rep(j,2)cin>>vb[i][j];
  auto retv=rec();
  for(auto res:retv)
  {
  cout<<res.first<<endl;
  cout<<res.second<<endl;
  }
  return 0;

}

Submission Info

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