QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#224353#7179. Fischer's Chess Guessing GamedoziccRE 3ms3680kbC++144.4kb2023-10-23 01:29:562023-10-23 01:29:56

Judging History

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

  • [2023-10-23 01:29:56]
  • 评测
  • 测评结果:RE
  • 用时:3ms
  • 内存:3680kb
  • [2023-10-23 01:29:56]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

vector<pair<string, int> >permutation;
map<char, int>check;
ll cnt[960][9], c=0;
void gen(int k, string s)
{
    if(k==8)
    {
        int pl1=0, pl2=0, pp1=0, pp2=0;
        for(int i=0; i<8; i++)
        {
            if(s[i]=='B')
            {
                if(pl1!=0)pl2=i+1;
                else pl1=i+1;
            }
            if(s[i]=='K')
            {
                if(pp1!=0 and pp2!=0)return;
                if(pp1==0 and pp2==0)return;
            }
            if(s[i]=='R')
            {
                if(pp1!=0)pp2=i+1;
                else pp1=i+1;
            }
        }
        if(pl1%2==pl2%2)return;
        permutation.push_back({s, c});
        c++;
        return;
    }
    if(check['R']<2)
    {
        check['R']++; s+='R';
        gen(k+1, s); check['R']--; s.pop_back();
    }
    if(check['B']<2)
    {
        check['B']++; s+='B';
        gen(k+1, s); check['B']--; s.pop_back();
    }
    if(check['N']<2)
    {
        check['N']++; s+='N';
        gen(k+1, s); check['N']--; s.pop_back();
    }
    if(check['K']<1)
    {
        check['K']++; s+='K';
        gen(k+1, s); check['K']--; s.pop_back();
    }
    if(check['Q']<1)
    {
        check['Q']++; s+='Q';
        gen(k+1, s); check['Q']--; s.pop_back();
    }
    return;
}

int main()
{
    gen(0, "");
    string st;
    for(int i=0; i<960; i++)
    {
        for(int j=i+1; j<960; j++)
        {
            int br=0;
            for(int l=0; l<8; l++)
            {
                if(permutation[i].first[l]==permutation[j].first[l])br++;
            }
            cnt[i][br]++; cnt[j][br]++;
        }
    }
    getline(cin, st);
    while(true){

    vector<pair<string, int> >perm;
    int idx=-1, mini=INT_MAX;
    for(int i=0; i<960; i++)
    {
        ll lmax=0;
        for(int j=0; j<9; j++)lmax=max(lmax, cnt[i][j]);
        if(lmax<mini){mini=lmax; idx=i;}
        perm.push_back(permutation[i]);
    }
    cout<<permutation[idx].first<<endl;
    int ans; cin>>ans;
    if(ans==8)
    {
        string str; int bb;
        cin>>str;
        if(str=="END")return 0;
        else {cin>>bb; continue;}
    }
    vector<pair<string, int> >smor;
    ///  ---------------------prvo------------------------ ///
    int t=2; bool b=false;
    while(t--)
    {for(int i=0; i<perm.size(); i++)
    {
        int br=0;
        for(int l=0; l<8; l++)
        {
            if(perm[i].first[l]==perm[idx].first[l])br++;
        }
        if(br==ans)smor.push_back(perm[i]);
    }
    idx=-1, mini=INT_MAX;
    for(int i=0; i<smor.size(); i++)
    {
        ll lmax=0;
        for(int j=0; j<9; j++)lmax=max(lmax, cnt[smor[i].second][j]);
        if(lmax<mini){mini=lmax; idx=i;}
    }
    cout<<smor[idx].first<<endl;
    perm.clear();
    cin>>ans;
    if(ans==8)
    {
        string str; int bb;
        cin>>str;
        if(str=="END")return 0;
        else {cin>>bb; b=true; break;}
    }
    for(int i=0; i<smor.size(); i++)
    {
        int br=0;
        for(int l=0; l<8; l++)
        {
            if(smor[i].first[l]==smor[idx].first[l])br++;
        }
        if(br==ans)perm.push_back(smor[i]);
    }
    idx=-1, mini=INT_MAX;
    for(int i=0; i<perm.size(); i++)
    {
        ll lmax=0;
        for(int j=0; j<9; j++)lmax=max(lmax, cnt[perm[i].second][j]);
        if(lmax<mini){mini=lmax; idx=i;}
    }
    cout<<perm[idx].first<<endl;
    smor.clear();
    cin>>ans;
    if(ans==8)
    {
        string str; int bb;
        cin>>str;
        if(str=="END")return 0;
        else {cin>>bb; b=true; break;}
    }

    }
    if(b)continue;
    for(int i=0; i<perm.size(); i++)
    {
        int br=0;
        for(int l=0; l<8; l++)
        {
            if(perm[i].first[l]==perm[idx].first[l])br++;
        }
        if(br==ans)smor.push_back(perm[i]);
    }
    idx=-1, mini=INT_MAX;
    for(int i=0; i<smor.size(); i++)
    {
        ll lmax=0;
        for(int j=0; j<9; j++)lmax=max(lmax, cnt[smor[i].second][j]);
        if(lmax<mini){mini=lmax; idx=i;}
    }
    cout<<smor[idx].first<<endl;
    perm.clear();
    cin>>ans;
    if(ans==8)
    {
        string str; int bb;
        cin>>str;
        if(str=="END")return 0;
        else {cin>>bb; continue;}
    }
    }
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

GAME 1
4
4
5
4
8
END

output:

RQKBBNRN
RKQNBBRN
RKQBBNNR
RKQBRNBN
RKRBBQNN

result:

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

Test #2:

score: -100
Runtime Error

input:

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

output:

RQKBBNRN
RKQNBBRN
RKQBBNNR
RKQBRNBN
RKRBBQNN
RQKBBNRN
RKBBQNRN
RQBBNKRN
RKNBBNRQ
RKRBBNQN
RQKBBNRN
RKQNBBRN
RNBBQKRN
RKNBBNQR
RKRBBNNQ
RQKBBNRN
RKQNBBRN
RNBBQKRN
RKBBRNQN
RKBBNNRQ
RKRBQNBN
RQKBBNRN
RKBNQBRN
RKBBNNQR
RNBBNKRQ
RKQBNRBN
RKRBNQBN
RQKBBNRN
RKBNQBRN
RKQBNNBR
RKRBNNBQ
RQKBBNRN
RKBNQBRN
RKB...

result: