QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#292676 | #7179. Fischer's Chess Guessing Game | AlphaMale06 | TL | 0ms | 0kb | C++14 | 2.4kb | 2023-12-28 10:59:21 | 2023-12-28 10:59:21 |
answer
#include <bits/stdc++.h>
/*
Oce nas,
koji si na nebesima,
da se sveti ime Tvoje,
da dodje carstvo Tvoje,
da bude volja Tvoja,
i na zemlji, kao i na nebu.
Hleb nas nasusni daj nam danas,
i oprosti nam dugove nase,
kao sto i mi oprastamo duznicima svojim,
i ne uvedi nas u iskusenje,
no izbavi nas od zloga.
Jer je Tvoje Carstvo,
i sila, i slava,
u vekove vekova.
Amin.
*/
using namespace std;
typedef vector<int> vi;
typedef vector<vector<int>> vvi;
using ll = long long;
using ld = long double;
#define yes cout << "YES\n"
#define no cout << "NO\n"
#define F first
#define S second
#define pb push_back
#define pf push_front
#define mp make_pair
#define all(x) (x).begin(), (x).end()
set<string> st;
set<pair<int, string>> cur;
set<pair<int, string>> ncur;
bool checkvalid(string s){
int indb1, indb2, indk;
indb1=-1;
for(int i=0; i< 8; i++){
if(s[i]=='B'){
if(indb1==-1){
indb1=i;
}
else indb2=i;
}
if(s[i]=='K'){
indk=i;
}
}
if(indb1%2==indb2%2)return 0;
int cnt=0;
for(int i=0; i< indk; i++){
if(s[i]=='R')cnt++;
}
if(cnt==1)return 1;
return 0;
}
int inter(string a, string b){
int ans=0;
for(int i=0; i< 8; i++){
if(a[i]==b[i])ans++;
}
return ans;
}
void calcbest(){
for(auto it1= cur.begin(); it1!=cur.end(); it1++){
int cnt[9]={0};
for(auto it2=cur.begin(); it2!=cur.end(); it2++){
cnt[inter((*it1).S, (*it2).S)]++;
}
int mx=0;
for(int i=0; i< 9; i++)mx=max(mx, cnt[i]);
ncur.insert({mx, (*it1).S});
}
cur.clear();
for(auto it = ncur.begin(); it!=ncur.end(); it++){
cur.insert(*it);
}
ncur.clear();
}
void solve(){
for(auto it = st.begin(); it!=st.end(); it++){
cur.insert({0, *it});
}
int ans=0;
while(ans!=8){
calcbest();
string output= (*cur.begin()).S;
cout << output << endl;
cin >> ans;
for(auto it = cur.begin(); it!=cur.end(); it++){
if(inter(output, (*it).S)!=ans){
ncur.insert(*it);
}
}
cur.clear();
for(auto it = ncur.begin(); it!=ncur.end(); it++){
cur.insert(*it);
}
ncur.clear();
}
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
string s="RRKNNQBB";
sort(all(s));
while(next_permutation(all(s))){
if(checkvalid(s))st.insert(s);
}
string partija;
cin >> partija;
while(partija!="END"){
int mrs;
cin >> mrs;
solve();
cin >> partija;
}
}
详细
Test #1:
score: 0
Time Limit Exceeded
input:
GAME 1 1 1 2 1 1 1
output:
NRBBNKQR NRBBKNQR BQRBNNKR QRBBNNKR BRQBNNKR BNQBRNKR