QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#291846#7179. Fischer's Chess Guessing GameOAleksaWA 16ms3684kbC++142.4kb2023-12-27 09:42:432023-12-27 09:42:44

Judging History

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

  • [2023-12-27 09:42:44]
  • 评测
  • 测评结果:WA
  • 用时:16ms
  • 内存:3684kb
  • [2023-12-27 09:42:43]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
#define int long long
const int N = 960;
vector<int> g(N);
vector<char> sv = {'K', 'Q', 'N', 'N', 'B', 'B', 'R', 'R'};
vector<string> perm;
int good(vector<char> ord) {
	int x = -1, y = -1, z = -1, b = -1, a = -1;
	for (int i = 0;i < 8;i++) {
		if (ord[i] == 'K')
			z = i;
		else if (ord[i] == 'B') {
			if (x == -1)
				x = i;
			else
				y = i;
		}
		else if (ord[i] == 'R') {
			if (a == -1)
				a = i;
			else
				b = i;
		}
	}
	return z < b && z > a && x % 2 != y % 2;
};
int diff(string a, string b) {
	int r = 0;
	for (int i = 0;i < 8;i++)
		r += (a[i] == b[i]);
	return r;
};
string ans;
void resi(int r) {
	int x = 0;
	for (int i = 0;i < N;i++) {
		if (diff(perm[i], ans) != r) {
			g[i] = false;
			x++;
		}
	}
	int mn = 1e9;
	for (int i = 0;i < N;i++) {
		if (!g[i])
			continue;
		int mx = 0;
		vector<int> cnt(10);
		for (int j = 0;j < N;j++) {
			if (!g[j])
				continue;
			mx = max(mx, ++cnt[diff(perm[i], perm[j])]);
		}
		if (mx < mn) {
			mn = mx;
			ans = perm[i];
		}
	}
	cout << mn << " " << x << endl;
}
signed main() {
	ios_base::sync_with_stdio(false);
  cout.tie(nullptr); 
  cin.tie(nullptr);
  //freopen("newbarn.in", "r", stdin);
  //freopen(newbarn.out", "w", stdout);
  int tt = 1;
  //cin >> tt;
  while (tt--) {
  	vector<int> order(8);
  	iota(order.begin(), order.end(), 0);
  	map<string, int> bio;
  	do {
  		vector<char> t;
  		for (int i = 0;i < 8;i++)
  			t.push_back(sv[order[i]]);
  		if (good(t)) {
  			string s;
  			for (auto x : t)
  				s += x;
  			if (bio[s])
  				continue;
  			bio[s] = 1;
  			perm.push_back(s);
  		}
  	} while (next_permutation(order.begin(), order.end()));
  	int mx = 1e9;
  	string ans1;
  	for (int i = 0;i < 960;i++) {
  		vector<int> cnt(10);
  		int l = 0;
  		for (int j = 0;j < 960;j++) 
  			l = max(l, ++cnt[diff(perm[i], perm[j])]);
  		if (l < mx) {
  			ans1 = perm[i];
  			mx = l;
  		}
  	}
  	ans1 = "NRBBNKQR";
  	while (true) {
  		string s;
  		cin >> s;
  		if (s == "GAME") {
  			ans = ans1;
  			for (int i = 0;i < N;i++)
  				g[i] = 1;
  			cin >> s;
  			int c = 0;
  			while (true) {
  				cout << ans << endl;
  				c++;
  				int r;
  				cin >> r;
  				if (r == 8 || c == 6)
  					break;
  				resi(r);
  			}
  		}
  		else
  			break;
  	}
  }
  return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 16ms
memory: 3684kb

input:

GAME 1
1

output:

NRBBNKQR
67 699
BNRKQBNR

result:

wrong answer (i) illegal position "67 699" (game 1, guess 2) (test case 1)