QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#291788#7179. Fischer's Chess Guessing GameOAleksaTL 7ms3752kbC++141.8kb2023-12-27 07:31:502023-12-27 07:31:50

Judging History

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

  • [2023-12-27 07:31:50]
  • 评测
  • 测评结果:TL
  • 用时:7ms
  • 内存:3752kb
  • [2023-12-27 07:31:50]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
#define f first
#define s second
#define int long long
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;
};
vector<pair<string, int>> pr;
string ans;
void resi(int r) {
	pr.push_back({ans, r});
	for (auto x : perm) {
		int ok = 1;
		for (auto u : pr) 
			ok &= (diff(u.f, x) == u.s);
		if (ok)
			ans = x;
	}
}
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()));
  	while (true) {
  		string s;
  		cin >> s;
  		if (s == "GAME") {
  			cin >> s;
  			ans = perm[0];
  			int r;
  			while (true) {
  				cout << ans << endl;
  				cin >> r;
  				if (r == 8)
  					break;
  				resi(r);
  			}
  		}
  		else
  			break;
  	}
  }
  return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 7ms
memory: 3752kb

input:

GAME 1
2
2
3
2
8
END

output:

QNNBBRKR
RBBNNQKR
RBNQBKRN
RNKNBBRQ
RKRBBQNN

result:

ok (c) correct after 1 tests, max moves 5 (1 test case)

Test #2:

score: -100
Time Limit Exceeded

input:

GAME 1
2
2
3
2
8
GAME 2
2
6
6
6
6
6

output:

QNNBBRKR
RBBNNQKR
RBNQBKRN
RNKNBBRQ
RKRBBQNN
QNNBBRKR
RKRBBQNN
RKRBBQNN
RKRBBQNN
RKRBBQNN
RKRBBQNN
RKRBBQNN

result: