結果
| 問題 |
No.5014 セクスタプル (reactive)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-12-09 11:13:34 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 27 ms / 2,000 ms |
| コード長 | 1,980 bytes |
| コンパイル時間 | 3,398 ms |
| 実行使用メモリ | 22,832 KB |
| スコア | 385,222,976 |
| 平均クエリ数 | 35.00 |
| 最終ジャッジ日時 | 2022-12-09 11:13:46 |
| 合計ジャッジ時間 | 11,655 ms |
|
ジャッジサーバーID (参考情報) |
judge15 / judge11 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 100 |
ソースコード
#include<bits/stdc++.h>
using namespace std;
double prob[8][64]={0.0};
double sing[8]={0.0};
vector<vector<int>> field(36);
double eval(){
double res=0;
for(int i=0;i<6;i++){
vector<int> bk(6,0);
vector<int> ok(6,1e9);
int unk=0;
for(int j=0;j<6;j++){
if(field[i*6+j].empty()){unk++;continue;}
for(int k=0;k<6;k++){
bk[k]+=field[i*6+j][k];
ok[k]=min(ok[k],field[i*6+j][k]);
}
}
for(int k=unk;k<=6*unk;k++){
for(int l=0;l<6;l++){
if(ok[l]>0){
double del=(k+bk[l]-3);
res+=del*prob[unk][k];
}
}
}
}
for(int j=0;j<6;j++){
vector<int> bk(6,0);
vector<int> ok(6,1e9);
int unk=0;
for(int i=0;i<6;i++){
if(field[i*6+j].empty()){unk++;continue;}
for(int k=0;k<6;k++){
bk[k]+=field[i*6+j][k];
ok[k]=min(ok[k],field[i*6+j][k]);
}
}
for(int k=unk;k<=6*unk;k++){
for(int l=0;l<6;l++){
if(ok[l]>0){
double del=(k+bk[l]-3);
res+=del*prob[unk][k];
}
}
}
}
return res;
}
int main(){
sing[0]=1.0;
for(int i=0;i<6;i++){
for(int j=i;j>=0;j--){
sing[i+1]+=sing[i]*(1.0/6.0);
sing[i]*=(5.0/6.0);
}
}
prob[0][0]=1.0;
for(int i=1;i<=6;i++){
for(int j=0;j<=6*(i-1);j++){
for(int k=1;k<=6;k++){
// at least one X
prob[i][j+k]+=prob[i-1][j]*sing[k];
}
}
}
for(int i=0;i<35;i++){
vector<int> bk(6,0);
for(int j=0;j<6;j++){
int v;
cin >> v;
v--;
bk[v]++;
}
int cur=0;
double mev=-1;
for(int j=0;j<36;j++){
// cerr << j << "\n";
if(field[j].empty()){
field[j]=bk;
double ce=eval();
if(mev<ce){
mev=ce;
cur=j;
}
field[j].clear();
}
}
cout << (cur/6)+1 << " " << (cur%6)+1 << "\n";
cerr << mev << "\n";
fflush(stdout);
field[cur]=bk;
}
return 0;
}