QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#254156 | #7179. Fischer's Chess Guessing Game | sofija6 | TL | 0ms | 0kb | C++17 | 2.5kb | 2023-11-18 02:40:12 | 2023-11-18 02:40:12 |
answer
#include <bits/stdc++.h>
#define ll int
#define MAXN 970
using namespace std;
vector<string> v;
vector<ll> startt[10],d[10],cur;
ll diff[MAXN][MAXN];
ll ans;
void Solve(ll a)
{
cur=d[a];
ll maxx=INT_MAX;
for (ll i : cur)
{
ll cnt[10]={0},m=0;
for (ll j : cur)
{
cnt[diff[i][j]]++;
m=max(m,cnt[diff[i][j]]);
}
if (m<maxx && i!=ans)
{
maxx=m;
ans=i;
}
}
for (ll i=0;i<9;i++)
d[i].clear();
for (ll i : cur)
d[diff[ans][i]].push_back(i);
}
ll b,p,k,n,q,r,prevv;
string s;
void Create()
{
if ((ll)s.size()==8)
{
v.push_back(s);
return;
}
if (!b || (b==1 && p!=s.size()%2))
{
b++;
prevv=p;
p=s.size()%2;
s+='B';
Create();
p=prevv;
b--;
s.pop_back();
}
if (!k && r==1)
{
s+='K';
k++;
Create();
k--;
s.pop_back();
}
if (n!=2)
{
s+='N';
n++;
Create();
n--;
s.pop_back();
}
if (!q)
{
s+='Q';
q++;
Create();
q--;
s.pop_back();
}
if (!r || (r==1 && k==1))
{
s+='R';
r++;
Create();
r--;
s.pop_back();
}
return;
}
int main()
{
string x="";
ll ans0;
Create();
ll a;
for (ll i=0;i<v.size();i++)
{
if (v[i]=="NRBBNKQR")
ans0=i;
}
for (ll i=0;i<v.size();i++)
{
for (ll j=i+1;j<v.size();j++)
{
ll cnt=0;
for (ll p=0;p<8;p++)
cnt+=(v[i][p]!=v[j][p]);
diff[i][j]=cnt;
diff[j][i]=cnt;
}
}
for (ll i=0;i<v.size();i++)
{
ll cnt=0;
for (ll j=0;j<8;j++)
cnt+=(v[ans0][j]!=v[i][j]);
startt[cnt].push_back(i);
}
while (true)
{
if (x=="")
cin >> x;
cin >> n;
ans=ans0;
while (true)
{
cout << v[ans] << "\n";
a=8-a;
if (ans==ans0)
d[a]=startt[a];
if (!a)
{
cin >> x;
if (x=="END")
return 0;
break;
}
Solve(a);
}
}
return 0;
}
詳細信息
Test #1:
score: 0
Time Limit Exceeded
input:
GAME 1 1 3 1 3 1 3
output:
NRBBNKQR RKNNRQBB NRBBNKQR RKNNRQBB NRBBNKQR RKNNRQBB NRBBNKQR RKNNRQBB