QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#345288#7179. Fischer's Chess Guessing Gameinstallb#WA 68ms3696kbC++142.0kb2024-03-06 19:04:562024-03-06 19:04:56

Judging History

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

  • [2024-03-06 19:04:56]
  • 评测
  • 测评结果:WA
  • 用时:68ms
  • 内存:3696kb
  • [2024-03-06 19:04:56]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double db;
const int N = 800005;

vector <string> G,iG;
map <string,int> mp; int tot = 0;

void init1(){
    string s = "BBKNNQRR";
    do{
        int pk; vector <int> pb,pr;
        for(int i = 0;i < 8;i ++){
            if(s[i] == 'B') pb.push_back(i);
            if(s[i] == 'R') pr.push_back(i);
            if(s[i] == 'K') pk = i;
        }
        if((pb[0] & 1) == (pb[1] & 1)) continue;
        if(!(pr[0] < pk && pk < pr[1])) continue;
        if(mp.find(s) != mp.end()) continue;
        mp[s] = tot ++;
        G.push_back(s);
    }while(next_permutation(s.begin(),s.end()));
}

mt19937 rnd(998244353);
string SS;

int calc(string x,string y){ int r = 0; for(int i = 0;i < 8;i ++) if(x[i] == y[i]) r ++; return r; }

void solve(){
    vector <string> H;
    G = iG;
    string lis[6];
    for(int ti = 0;ti < 5;ti ++){
        db anss = 1e999;
        if(G.size() == 1) break;
        string cur;
		if(ti > 0){
			for(int x = 0;x < G.size();x ++){
				map <int,int> chk;
				for(int i = 0;i < G.size();i ++) chk[calc(G[i],G[x])] ++;
				db mx = 0, avg = 1.*G.size()/chk.size();
				for(auto it = chk.begin();it != chk.end();it ++){
					db val = 1.0 * it->second / G.size();
					mx += val * (it->second-avg) * (it->second-avg);
				}
				if(mx < anss){
					anss = mx;
					cur = G[x];
				}
			}
		}
		else{
			cur = "NRBBNQKR";
		}
        cout << cur << endl;
        int x;
        cin >> x;
        if(x == 8) return;
        for(int i = 0;i < G.size();i ++) if(calc(cur,G[i]) == x) H.push_back(G[i]);
        G.swap(H); H.clear();
        lis[ti] = cur;
    }
    cout << G[0] << endl;
    int x;
    cin >> x;
}


int main(){
    ios::sync_with_stdio(false);
    init1();
    iG = G;
    string str;
    while(cin >> str){
        if(str == "END") break;
        int x; cin >> x;
        // cin >> SS;
        solve();
    }
    return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 3ms
memory: 3684kb

input:

GAME 1
2
2
1
4
8
END

output:

NRBBNQKR
RBBNQKNR
RQNKNBBR
RKBBRNQN
RKRBBQNN

result:

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

Test #2:

score: -100
Wrong Answer
time: 68ms
memory: 3696kb

input:

GAME 1
2
2
1
4
8
GAME 2
1
1
3
2
6
8
GAME 3
1
1
4
2
6
8
GAME 4
1
1
4
4
8
GAME 5
3
0
2
1
8
GAME 6
2
1
1
3
3
8
GAME 7
0
5
3
5
8
GAME 8
0
3
4
6
8
GAME 9
0
4
4
5
8
GAME 10
0
6
4
8
GAME 11
1
4
3
2
8
GAME 12
0
4
6
8
GAME 13
1
1
2
2
5
8
GAME 14
0
2
1
2
6
8
GAME 15
1
2
2
2
8
GAME 16
1
2
1
4
8
GAME 17
0
3
4
3...

output:

NRBBNQKR
RBBNQKNR
RQNKNBBR
RKBBRNQN
RKRBBQNN
NRBBNQKR
BNRNKQRB
RNKBRNBQ
RBNQKNBR
RKQBBNRN
RKRBBNQN
NRBBNQKR
BNRNKQRB
RNKBRNBQ
RBKNQNBR
RKNBBNRQ
RKRBBNNQ
NRBBNQKR
BNRNKQRB
RNKBRNBQ
RBKNQNBR
RKRBQNBN
NRBBNQKR
NRBNKBRQ
RNQBBNKR
BBNQNRKR
RKRBNQBN
NRBBNQKR
RBBNQKNR
NRQNKRBB
BRKBRNNQ
BNRBKNQR
RKRBNNBQ
NRB...

result:

wrong answer (i) too many guesses in game 41, pos =