QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#641468#7179. Fischer's Chess Guessing GamePedro_SimTL 289ms3944kbC++202.5kb2024-10-14 20:39:222024-10-14 20:39:24

Judging History

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

  • [2024-10-14 20:39:24]
  • 评测
  • 测评结果:TL
  • 用时:289ms
  • 内存:3944kb
  • [2024-10-14 20:39:22]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rp(i,a,b)        for(int i=a;i<b;i++)

vector<string> resp;

bool veri(string &t) {
    int te = -1;
    rp(i, 0, 8){
        if(te >= 0 && t[i] == 'B' && (i%2) == (te%2)) return false;
        else if(t[i] == 'B') te = i;
    }
    rp(i, 0, 8){
        if(t[i] == 'K'){
            bool flag1 = true, flag2 = true;
            rp(j, 0, i) if(t[j] == 'R') flag1 = false;
            rp(j, i, 8) if(t[j] == 'R') flag2 = false;
            if(flag1 || flag2) return false;
            break;
        }
    }
    return true;
}

void solvetask() {
    int n;
    cin >> n;
    
    //for(auto original: resp){
        vector<string> currentState = resp; 
        string best;
    for(int turn = 0; turn < 7; turn++) {
        // if(turn == 6) {
        //     cout << original << " " << currentState.size() << "\n";
        //     break;
        // }
        int mx = 1e9;
        string chute;
        for (auto &comp : currentState) {
            vector<int> bins(9, 0); 
                
            for (auto &candidate : currentState) {
                int matches = 0;
                rp(k, 0, 8)  if (comp[k] == candidate[k]) matches++;
                bins[matches]++;
            }
                
            int melhorbin = *max_element(bins.begin(), bins.end());
            if (melhorbin < mx) {
                mx = melhorbin;
                chute = comp;
            }
        }

        if(turn == 0) chute = "RBBNNQKR";

       // if(turn == 5) chute = currentState[rand()%(currentState.size())];
        

        cout << chute << endl;
        fflush(stdout);
        int iguais=0;
        cin >> iguais;
       // rp(k, 0, 8) if (chute[k] == original[k]) iguais++;
        if (iguais == 8) break;

        vector<string> newState;
        for (auto &comp : currentState) {
            int matches = 0;
            rp(k, 0, 8) if (comp[k] == chute[k]) matches++;
            if (matches == iguais) newState.push_back(comp);
        }
        currentState = newState;
    }
    //}
}

void pre_cal() {
    string temp = "BBQKNNRR";
    sort(temp.begin(), temp.end());
    while(next_permutation(temp.begin(), temp.end())) if(veri(temp)) resp.push_back(temp);
}

int main() {
    srand(time(0));
    cin.tie(0)->sync_with_stdio(0);
    string t;
    pre_cal();

    while (true) {
        cin >> t;
        if (t == "END") return 0; 
        solvetask();
    }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 3712kb

input:

GAME 1
2
2
3
0
8
END

output:

RBBNNQKR
NRBBQKNR
RQNKBBNR
BNNRQBKR
RKRBBQNN

result:

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

Test #2:

score: 0
Accepted
time: 289ms
memory: 3772kb

input:

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

output:

RBBNNQKR
NRBBQKNR
RQNKBBNR
BNNRQBKR
RKRBBQNN
RBBNNQKR
RNQBBKRN
RQNKBBRN
BQRBNKRN
NRKBBQRN
RKRBBNQN
RBBNNQKR
RNQBBKRN
RKNBBRNQ
RKRBBNNQ
RBBNNQKR
RNQBBKRN
RKNBBRNQ
NBNRBKRQ
RKRBQNBN
RBBNNQKR
NBQRBNKR
RKBBNRQN
RKRBNQBN
RBBNNQKR
NRBBQKNR
BBRNKRNQ
RKRNQNBB
RKRBNNBQ
RBBNNQKR
RNQBBKRN
RKNBBRNQ
RNKQBRNB
RKN...

result:

ok (c) correct after 96 tests, max moves 6 (96 test cases)

Test #3:

score: 0
Accepted
time: 285ms
memory: 3944kb

input:

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

output:

RBBNNQKR
NRBBQKNR
BNRBQNKR
NQNBBRKR
RKQBBNNR
RBBNNQKR
NBQRBNKR
BNRQNBKR
RKNBBQNR
RBBNNQKR
NRBBQKNR
RQNKBBNR
NQRKNBBR
RKNBBNQR
RBBNNQKR
NBQRBNKR
QNRNBBKR
BBNRKQNR
RKQBNNBR
RBBNNQKR
NRBBQKNR
BNRBQNKR
NNRBKQBR
RKNBQNBR
RBBNNQKR
QBRNBNKR
RBBKNRQN
RKBNRQNB
RKNBNQBR
RBBNNQKR
NBQRBNKR
QNRNBBKR
NNBQRBKR
RKQ...

result:

ok (c) correct after 96 tests, max moves 6 (96 test cases)

Test #4:

score: 0
Accepted
time: 262ms
memory: 3816kb

input:

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

output:

RBBNNQKR
BNRBKRQN
QRNKRBBN
NRNKQRBB
QRKRBBNN
RBBNNQKR
BNRBKRQN
NNRQBKRB
BQNRKNRB
NQRKRBBN
NRKRBBQN
RBBNNQKR
BNRBKRQN
NRQKRNBB
NQNRBKRB
NRKRBBNQ
RBBNNQKR
BNRBKRQN
NRQKRNBB
NRNKBBRQ
QRKRBNNB
RBBNNQKR
RNQBBKRN
BNRNKRQB
NRBKRBQN
NRKBNRBQ
NRKRBQNB
RBBNNQKR
BNRBKRQN
QRNKRBBN
BRKRQNNB
NRKRBNQB
RBBNNQKR
RNQ...

result:

ok (c) correct after 96 tests, max moves 6 (96 test cases)

Test #5:

score: -100
Time Limit Exceeded

input:

GAME 1
1
2
0
4
5
8
GAME 2
1
4
4
2
8
GAME 3
1
2
0
5
8
GAME 4
1
1
1
2
1
8
GAME 5
1
3
1
2
0
8
GAME 6
2
0
2
1
4
4

output:

RBBNNQKR
RNQBBKRN
NRKBBNQR
RNNKQRBB
RKNRQBBN
RQNKRBBN
RBBNNQKR
RNQBBKRN
RQNKBBRN
RKNBBRQN
RNQKRBBN
RBBNNQKR
RNQBBKRN
NRKBBNQR
RNNKQRBB
RNNKRBBQ
RBBNNQKR
RNQBBKRN
BNRNKRQB
NRBKRBQN
NRKBNRBQ
RQNKRNBB
RBBNNQKR
RNQBBKRN
RKNBBRNQ
NNRBQKBR
BBNRQKRN
RNQKRNBB
RBBNNQKR
NRBBQKNR
RQKNBNRB
BBRKNNRQ
RKNNRBBQ
RKN...

result: