QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#292706 | #7179. Fischer's Chess Guessing Game | AlphaMale06 | TL | 0ms | 0kb | C++14 | 2.3kb | 2023-12-28 11:37:20 | 2023-12-28 11:37: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()
vector<string> v;
vector<pair<int, int>> cur;
vector<pair<int, int>> ncur;
int gas[960][960];
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(int i, int j){
int ans=0;
for(int k=0; k< 8; k++){
if(v[i][k]==v[j][k])ans++;
}
return ans;
}
void calcbest(){
for(auto p : cur){
int cnt[9]={0};
for(auto p2 : cur){
cnt[gas[p.S][p2.S]]++;
}
int mx=0;
for(int i=0; i< 9; i++)mx=max(mx, cnt[i]);
ncur.pb({mx, p.S});
}
cur.clear();
for(auto p : ncur){
cur.pb(p);
}
ncur.clear();
}
void solve(){
for(int i=0; i< 960; i++){
cur.pb({0, i});
}
int ans=0;
while(ans!=8){
calcbest();
sort(all(cur));
string output= v[cur[0].S];
cout << output << '\n';
cin >> ans;
for(auto p : cur){
if(gas[cur[0].S][p.S]==ans){
ncur.pb({0, p.S});
}
}
cur.clear();
for(auto p : ncur){
cur.pb(p);
}
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))v.pb(s);
}
for(int i=0; i< 960; i++){
for(int j=0; j< 960; j++){
gas[i][j]=inter(i, j);
}
}
string partija;
cin >> partija;
while(partija!="END"){
int mrs;
cin >> mrs;
solve();
cin >> partija;
}
}
详细
Test #1:
score: 0
Time Limit Exceeded
input:
GAME 1