QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#292717#7179. Fischer's Chess Guessing GameAlphaMale06TL 0ms0kbC++142.5kb2023-12-28 11:46:442023-12-28 11:46:44

Judging History

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

  • [2023-12-28 11:46:44]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:0kb
  • [2023-12-28 11:46:44]
  • 提交

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>> precalc;
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(precalc[i]);
	}
	int ans=0;
	while(ans!=8){
		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();
		calcbest();
		sort(all(cur));
	}
}

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);
		}
	}
	for(int i=0; i< 960; i++){
		cur.pb({0, i});
	}
	calcbest();
	sort(all(cur));
	for(int i=0; i< 960; i++)precalc.pb(cur[i]);
	cur.clear();
	string partija;
	cin >> partija;
	while(partija!="END"){
		int mrs;
		cin >> mrs;
		solve();
		cin >> partija;
		cur.clear();
	}
}

详细

Test #1:

score: 0
Time Limit Exceeded

input:

GAME 1

output:


result: