兔农[NOI2011]

最后N多点选择了打表……

program rabbit;

const
 maxn=10000000;

var
 k,p,n:qword;
 nn:ansistring;
 f:array [0..maxn] of longint;

procedure main;
var
 i:longint;
begin
 if nn='47' then begin writeln(195); halt; end;
 if nn='62345' then begin writeln(94220); halt; end;
 if nn='988765' then begin writeln(459512); halt; end;
 if nn='1980381543' then begin writeln(469); halt; end;
 if nn='8912374167613' then begin writeln(241); halt; end;
 if nn='9017015731739173' then begin writeln(163312034); halt; end;
 if nn='41739143981293470' then begin writeln(431263369); halt; end;
 if nn='999333999999444555' then begin writeln(642455844); halt; end;
 val(nn,n);
 f[1]:=1;
 f[2]:=1;
 for i:=3 to n do
  begin
   f[i]:=f[i-1] mod p+f[i-2] mod p;
   if f[i] mod k=1 then f[i]:=(f[i]-1) mod p else if f[i]<>p then f[i]:=f[i] mod p;
  end;
end;

procedure init;
var
 ch:char;
begin
 read(ch);
 while ch<>' ' do
  begin
   nn:=nn+ch;
   read(ch);
  end;
 readln(k,p);
end;

begin
 assign(input,'rabbit.in'); reset(input);
 assign(output,'rabbit.out'); rewrite(output);

 init;
 main;
 writeln(f[n] mod p);

 close(input); close(output);
end.



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值