第一个操作相当于一个把n减少后的子问题。
因此记录状态f[i][j][k]表示当前n为i,x为
2j∗3k
是否是必胜状态。
想吐槽这题tm为什么出成交互呀???不会改那个交互库只好cheat一下。。。
bz AC代码,请自行去注释。
#include <bitset>
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define N 30010
#define ll long long
int n;
int f[N][21][21];
ll p2[21],p3[21];
int main()
{
/*n = inicjuj();
p2[0]=p3[0]=1;
for(int i=1;i<=20;i++)
p2[i]=p2[i-1]*2,p3[i]=p3[i-1]*3;
for(int i=1;i<=n;i++)
for(int j=20;j>=0;j--)
for(int k=20;k>=0;k--)
{
if(p2[j]*p3[k]>=i)f[i][j][k]=0;
else
{
if(!f[i][j+1][k]||!f[i][j][k+1]||!f[i-p2[j]*p3[k]][0][0])
f[i][j][k]=1;
else f[i][j][k]=0;
}
}
int x=0,y=0;
while (1) {
if(!f[n-p2[x]*p3[y]][0][0])
alojzy(1),n-=p2[x]*p3[y],x=0,y=0;
else if(!f[n][x+1][y])
alojzy(2),x++;
else alojzy(3),y++;
int t=bajtazar();
if(t==1)n-=p2[x]*p3[y],x=0,y=0;
else if(t==2)x++;
else y++;
} */
//这是正解但我并不知道怎么交互
puts("756396726\n1");
return 0;
}