QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#478224#7179. Fischer's Chess Guessing GamePedro_SimTL 1ms3856kbC++172.1kb2024-07-14 19:02:572024-07-14 19:02:57

Judging History

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

  • [2024-07-14 19:02:57]
  • 评测
  • 测评结果:TL
  • 用时:1ms
  • 内存:3856kb
  • [2024-07-14 19:02:57]
  • 提交

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;
    vector<string> temp = resp;
    string compa = "RKRBBQNN";
    string at = temp[0];
    for(int i = 0; i < 10; i++){
        cout << at << endl;
        fflush (stdout);
        int iguais=0;
        cin >> iguais;
        //for(int j = 0; j < 8; j++) if(compa[j] == at[j]) iguais++;
        if(iguais == 8) return;
        vector<string> nova;
        for(int j = 1; j < temp.size(); j++){
            int comp = 0;
            for(int k = 0; k < 8; k++) if(at[k] == temp[j][k]) comp++;
            if(comp == iguais) nova.push_back(temp[j]);
        }
        temp = nova;
        int atual = 0;
        for(int i = 0; i < temp.size(); i++){
            int t=0;
            for(int j = 0; j < temp.size(); j++){
                int comp = 0;
                for(int k = 0; k < 8; k++) if(at[k] == temp[j][k]) comp++;
                if(comp == iguais) t++;
            }
            if(t > atual){
                t = atual;
                at = temp[i];
            }
        }
    }
}

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);
        else continue;
    }
}

int main(){
    cin.tie(0)->sync_with_stdio(0);
    string t;
    pre_cal();
    while(true){
        cin >> t;
        if(t == "END") return 0;
        solvetask();
    } 
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 3856kb

input:

GAME 1
0
1
3
4
8
END

output:

BBNNQRKR
RQKRNNBB
RNQKBBRN
NQRBBKRN
RKRBBQNN

result:

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

Test #2:

score: -100
Time Limit Exceeded

input:

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

output:

BBNNQRKR
RQKRNNBB
RNQKBBRN
NQRBBKRN
RKRBBQNN
BBNNQRKR
RQKRNNBB
RQBKRBNN
RKRBBNNQ
RKRBBNQN
BBNNQRKR
RQKRNNBB
RQBKRBNN
RKRBBNNQ
BBNNQRKR
RQNKRNBB
RQNBBKRN
RKNRBQNB
RKRBQNBN
BBNNQRKR
RQKRNNBB
RQBKNBRN
RNQKBNRB
RKRBNQBN
BBNNQRKR
RQKRNNBB
RQKRBBNN
NQRKRNBB
RKRBNNBQ
BBNNQRKR
RQKRNNBB
RNQKBBRN
NNRKBQRB
RNB...

result: