QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#224527#7179. Fischer's Chess Guessing GamedoziccTL 0ms0kbC++145.4kb2023-10-23 03:31:332023-10-23 03:31:33

Judging History

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

  • [2023-10-23 03:31:33]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:0kb
  • [2023-10-23 03:31:33]
  • 提交

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()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    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]);
        }
    ///----------IZLAZ 1-----------///
        cout<<permutation[idx].first<<"\n";
        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]);
            }
            //cout<<smor.size()<<"<33\n";
            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;}
            }
    ///------------IZLAZ 2--------------///
            cout<<smor[idx].first<<"\n";
            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]);
            }
            //cout<<perm.size()<<"<33\n";
            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;}
            }
    ///--------------IZLAZ 3---------------///
            cout<<perm[idx].first<<"\n";
            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]);
        }
        //cout<<smor.size()<<"<33\n";
        /*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[i].first<<endl;
        }*/
    ///----------------IZLAZ 4------------------///
        cout<<smor[0].first<<"\n";
        perm.clear();
        cin>>ans;
        if(ans==8)
        {
            string str; int bb;
            cin>>str;
            if(str=="END")return 0;
            else {cin>>bb; continue;}
        }
    }
    return 0;
}

詳細信息

Test #1:

score: 0
Time Limit Exceeded

input:

GAME 1

output:


result: