結果
| 問題 |
No.5013 セクスタプル (open)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-12-09 10:26:00 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 1,954 ms / 2,000 ms |
| コード長 | 2,589 bytes |
| コンパイル時間 | 2,937 ms |
| 実行使用メモリ | 5,164 KB |
| スコア | 16,547 |
| 最終ジャッジ日時 | 2022-12-29 14:05:03 |
| 合計ジャッジ時間 | 204,618 ms |
|
ジャッジサーバーID (参考情報) |
judge15 / judge11 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 100 |
ソースコード
#include<bits/stdc++.h>
#include <sys/time.h>
using namespace std;
long long start_time;
void start_clock(){
struct timeval tv;
gettimeofday(&tv, NULL);
start_time=(tv.tv_sec*1000000+tv.tv_usec);
}
long long current_clock(){
struct timeval tv;
gettimeofday(&tv, NULL);
long long current_time=(tv.tv_sec*1000000+tv.tv_usec);
// cout << current_time-start_time << "(us)\n";
return current_time-start_time;
}
int f(vector<vector<int>> &dice){
int res=0;
for(int i=0;i<6;i++){
vector<int> mind(6,1e9);
vector<int> sumd(6,0);
for(int j=0;j<6;j++){
int tg=i*6+j;
vector<int> bk(6,0);
for(int k=0;k<6;k++){
bk[dice[tg][k]]++;
}
for(int k=0;k<6;k++){
mind[k]=min(mind[k],bk[k]);
sumd[k]+=bk[k];
}
}
for(int j=0;j<6;j++){
if(mind[j]>0){
res+=(sumd[j]-3);
}
}
}
for(int i=0;i<6;i++){
vector<int> mind(6,1e9);
vector<int> sumd(6,0);
for(int j=0;j<6;j++){
int tg=j*6+i;
vector<int> bk(6,0);
for(int k=0;k<6;k++){
bk[dice[tg][k]]++;
}
for(int k=0;k<6;k++){
mind[k]=min(mind[k],bk[k]);
sumd[k]+=bk[k];
}
}
for(int j=0;j<6;j++){
if(mind[j]>0){
res+=(sumd[j]-3);
}
}
}
return res;
}
void output(vector<vector<int>> &dice){
vector<int> rx(36),ry(36);
for(int i=0;i<6;i++){
for(int j=0;j<6;j++){
rx[dice[i*6+j][6]]=i+1;
ry[dice[i*6+j][6]]=j+1;
}
}
for(int i=0;i<36;i++){
cout << rx[i] << " " << ry[i] << "\n";
}
}
int main(){
std::random_device seed_gen;
std::mt19937_64 engine(seed_gen());
start_clock();
vector<vector<int>> dice(36);
for(int i=0;i<36;i++){
dice[i].resize(7);
dice[i][6]=i;
for(int j=0;j<6;j++){
cin >> dice[i][j];
dice[i][j]--;
}
}
int val=f(dice);
for(int i=0;;i++){
vector<int> p,q;
if(i%2){
int knd=(i%12)/2;
for(int j=0;j<6;j++){
p.push_back(knd*6+j);
}
}
else{
int knd=(i%12)/2;
for(int j=0;j<6;j++){
p.push_back(j*6+knd);
}
}
q=p;
shuffle(q.begin(),q.end(),engine);
int nval=-1;
vector<vector<int>> nd;
do{
vector<vector<int>> cd=dice;
for(int j=0;j<6;j++){
cd[p[j]]=dice[q[j]];
}
int cf=f(cd);
if(nval<cf){
nval=cf;
nd=cd;
}
}while(next_permutation(p.begin(),p.end()));
dice=nd;
val=nval;
if(current_clock()>1950000){break;}
}
output(dice);
cerr << f(dice) << "\n";
return 0;
}