前言
这是一到非常非常坑的博弈题,实现很容易,理解却很难,这里就不赘述了,正解请看这位dalao的博文。orz orz orz
这里就直接放代码了
CODE
var
t,n,k,x,y,i,j:longint;
a,b:array[0..100000]of longint;
begin
readln(t);
for i:=1 to t do begin
readln(n,k);
write('Case ',i,': ');
a[1]:=1;b[1]:=1;
x:=0;y:=0;
while a[x]<n do begin
inc(x);
a[x+1]:=b[x]+1;
while a[y+1]*k<a[x+1] do inc(y);
b[x+1]:=b[y]+a[x+1];
end;
if a[x]=n then writeln('lose')
else begin
j:=x;
while true do begin
while n-a[j]<0 do dec(j);
if n-a[j]=0 then begin
writeln(a[j]);
break;
end;
n:=n-a[j];
end;
end;
end;
end.