QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#292676#7179. Fischer's Chess Guessing GameAlphaMale06TL 0ms0kbC++142.4kb2023-12-28 10:59:212023-12-28 10:59:21

Judging History

你现在查看的是最新测评结果

  • [2023-12-28 10:59:21]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:0kb
  • [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

result: