QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#482930#7179. Fischer's Chess Guessing GamePedro_SimTL 1ms3680kbC++202.1kb2024-07-18 04:31:132024-07-18 04:31:15

Judging History

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

  • [2024-07-18 04:31:15]
  • 评测
  • 测评结果:TL
  • 用时:1ms
  • 内存:3680kb
  • [2024-07-18 04:31:13]
  • 提交

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 = "BRKNNQRB";
    string at = temp[0];
    for(int a = 0; a < 10; a++){
        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 = 0; j < temp.size(); j++){
            int comp = 0;
            if(at == temp[j]) continue;
            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=1e9;
            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: 3680kb

input:

GAME 1
0
1
3
8
END

output:

BBNNQRKR
RQKRNNBB
RNQKBBRN
RKRBBQNN

result:

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

Test #2:

score: -100
Time Limit Exceeded

input:

GAME 1
0
1
3
8
GAME 2
0
2
2
4
2
8
GAME 3
0
2
2
3
8
GAME 4
1
3
3
3
8
GAME 5
0
3
3
1
8
GAME 6
0
4
1
3
8
GAME 7
0
1
4
3
2
8
GAME 8
1
1
2
3
8
GAME 9
1
1
3
5
8
GAME 10
0
3
1
8
GAME 11
1
2
3
2
3
2

output:

BBNNQRKR
RQKRNNBB
RNQKBBRN
RKRBBQNN
BBNNQRKR
RQKRNNBB
RQBKRBNN
RNKBBQRN
RNBBNKRQ
RKRBBNQN
BBNNQRKR
RQKRNNBB
RQBKRBNN
RNKBBQRN
RKRBBNNQ
BBNNQRKR
RQNKRNBB
RQNBBKRN
RQBBKNNR
RKRBQNBN
BBNNQRKR
RQKRNNBB
RQBKNBRN
RNQKBNRB
RKRBNQBN
BBNNQRKR
RQKRNNBB
RQKRBBNN
RNQKRNBB
RKRBNNBQ
BBNNQRKR
RQKRNNBB
RNQKBBRN
RNB...

result: