結果
| 問題 | No.3418 【絶望】30個並列ごちゃ混ぜHit&Blowで遊ぼう! |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-12-25 20:34:09 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 81 ms / 5,000 ms |
| コード長 | 1,422 bytes |
| 記録 | |
| コンパイル時間 | 3,513 ms |
| コンパイル使用メモリ | 294,548 KB |
| 実行使用メモリ | 26,228 KB |
| スコア | 9,991,757 |
| 平均クエリ数 | 82.43 |
| 最終ジャッジ日時 | 2025-12-25 20:34:24 |
| 合計ジャッジ時間 | 15,330 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 100 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
mt19937 rn(28);
vector<string>p;
vector<bool>v(10,false);
string s;
void dfs(int i){
if(i==5){
p.push_back(s);
return ;
}
rep(j,10){
if(v[j])continue;
v[j]=true;
s.push_back(j+'0');
dfs(i+1);
s.pop_back();
v[j]=false;
}
return ;
}
using pii = pair<int,int>;
pii hitblow(string s,string t){
int h=0,b=0;
rep(i,5)rep(j,5){
if(s[i]==t[j]){
if(i==j)h++;
else b++;
}
}
return {h,b};
}
int main(){
dfs(0);
shuffle(p.begin(),p.end(),rn);
const int x=30;
vector<string>q;
vector<multiset<pii>>v;
int cnt=0;
for(string s:p){
if(cnt==x)break;
bool ok=true;
int m=q.size();
rep(i,m){
if(v[i].count(hitblow(s,q[i]))==0){
ok=false;
break;
}
}
if(!ok)continue;
q.push_back(s);
v.push_back({});
cout << s << endl;
rep(i,x){
int h,b;
cin >> h >> b;
if(i<x-cnt)v.back().insert({h,b});
}
if(v.back().count({5,0})){
cnt++;
rep(i,m+1){
v[i].erase(v[i].find(hitblow(s,q[i])));
}
}
}
return 0;
}