jzoj3033【NOIP2012模拟10.17】石子游戏

38 篇文章 0 订阅
32 篇文章 0 订阅

前言

这是一到非常非常坑的博弈题,实现很容易,理解却很难,这里就不赘述了,正解请看这位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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值