被虐的体无完肤,

直接给题解地址吧:http://vfleaking.blog.163.com/blog/static/174807634201341721051604/

 const maxk=;
type matrix=array[..,..] of int64;
var a:array[..maxk*] of longint;
first,last,b,len:array[..maxk] of longint;
pre:array[..maxk] of longint;
n,k,p,x,y,sum:int64;
i,j:longint;
ans,aa,bb,s:matrix; function ni(x:int64; y:longint):int64;
begin
ni:=;
while y> do
begin
if y mod = then ni:=ni*x mod k;
y:=y div ;
x:=x*x mod k;
end;
end; procedure work;
var i,d,ph:longint;
begin
a[]:=;a[]:=;i:=;
while true do
begin
inc(i);
a[i]:=(a[i-]+a[i-]) mod k;
if first[a[i]]= then first[a[i]]:=i;
if (a[i]=) and (a[i-]=) then break;
end;
d:=k;
ph:=k;
for i:= to trunc(sqrt(k)) do
if d mod i= then
begin
ph:=ph div i*(i-);
while d mod i= do d:=d div i;
end;
if d> then ph:=ph div d*(d-); for i:= to k- do
begin
pre[i]:=ni(i,ph-);
if int64(pre[i])*int64(i) mod k<> then pre[i]:=;
// writeln(pre[i]);
end;
b[]:=;last[]:=;i:=;
while true do
begin
len[i]:=first[pre[b[i]]]-;
if len[i]< then break;
inc(i);
b[i]:=int64(a[len[i-]])*b[i-] mod k;
if last[b[i]]> then break;
last[b[i]]:=i;
end;
aa[,]:=; aa[,]:=; aa[,]:=; aa[,]:=;
bb:=aa; bb[,]:=p-;
end; operator *(a,b:matrix)c:matrix;
var i,j,k:longint;
begin
for i:= to do
for j:= to do
begin
c[i,j]:=;
for k:= to do
c[i,j]:=(c[i,j]+a[i,k]*b[k,j]) mod p;
end;
end; function f(a:matrix;n:int64):matrix;
begin
fillchar(f,sizeof(f),);
f[,]:=;f[,]:=;f[,]:=;
while n> do
begin
if n and = then f:=f*a;
a:=a*a;
n:=n div ;
end;
end; begin
readln(n,k,p);
if n< then
begin
writeln();
exit;
end;
work;
ans[,]:=; ans[,]:=; ans[,]:=;
if n>len[] then
begin
dec(n,len[]+);
ans:=ans*f(aa,len[]-)*bb;
end
else begin
ans:=ans*f(aa,n-);
n:=;
end;
i:=;
while n> do
begin
if (pre[b[i]]=) or (len[i]<) then
begin
ans:=ans*f(aa,n);
n:=;
break;
end;
if last[b[i]]<i then break;
if n>len[i] then
begin
dec(n,len[i]+);
ans:=ans*f(aa,len[i])*bb;
end
else begin
ans:=ans*f(aa,n);
n:=;
end;
inc(i);
end;
if n<> then
begin
j:=i;
sum:=;
fillchar(s,sizeof(s),);
s[,]:=; s[,]:=; s[,]:=;
for i:=last[b[j]] to j- do
begin
inc(sum,len[i]+);
s:=s*f(aa,len[i])*bb;
end;
ans:=ans*f(s,n div sum);
n:=n mod sum;
i:=last[b[j]];
while n> do
begin
if n>len[i] then
begin
ans:=ans*f(aa,len[i])*bb;
dec(n,len[i]+);
end
else begin
ans:=ans*f(aa,n);
n:=;
end;
inc(i);
end;
end;
writeln((ans[,]+ans[,]+ans[,]) mod p);
end.

bzoj2432的更多相关文章

  1. 【BZOJ2432】【NOI2011】兔农(数论,矩阵快速幂)

    [BZOJ2432][NOI2011]兔农(数论,矩阵快速幂) 题面 BZOJ 题解 这题\(75\)分就是送的,我什么都不想写. 先手玩一下,发现每次每次出现\(mod\ K=1\)的数之后 把它减 ...

  2. BZOJ2432 [Noi2011]兔农

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  3. 【bzoj2432】【NOI2011】兔农

    题目描述 农夫栋栋近年收入不景气,正在他发愁如何能多赚点钱时,他听到隔壁的小 朋友在讨论兔子繁殖的问题. 问题是这样的:第一个月初有一对刚出生的小兔子,经过两个月长大后,这 对兔子从第三个月开始,每个 ...

  4. [BZOJ2432][Noi2011]兔农 矩阵乘法+exgcd

    2432: [Noi2011]兔农 Time Limit: 10 Sec  Memory Limit: 256 MB Description 农夫栋栋近年收入不景气,正在他发愁如何能多赚点钱时,他听到 ...

  5. [bzoj2432]兔农

    将每一个重置为0的点作为一段,那么它会导致后面为以x x为开头的斐波拿起数列的东西,那么设这一段是以x为开头,要快速转移到下一段,就可以解决这道题目为了转移,我们要处理出下面的东西:1.求出x关于模k ...

随机推荐

  1. 30款jQuery常用网页焦点图banner图片切换 下载

    1.jquery 图片滚动特效制作 slide 图片类似窗帘式图片滚动 查看演示 2.jquery幻灯片插件带滚动条的圆形立体图片旋转滚动 查看演示 3.jQuery图片层叠旋转类似洗牌翻转图片幻灯片 ...

  2. 【转载】Hadoop历史服务器详解

    免责声明:     本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除.     原文作者:过往记忆(http://www.iteblog.com/)     原文地址: ...

  3. execl执行解释器文件以及shell命令

    问题描述:        execl执行解释器文件以及shell命令 问题解决: 具体源文件:

  4. mvc 分页js

    <script type="text/javascript">     var configA = {         options: {             m ...

  5. Java多线程——<一>概述、定义任务

    一.概述 为什么使用线程?从c开始,任何一门高级语言的默认执行顺序是“按照编写的代码的顺序执行”,日常开发过程中写的业务逻辑,但凡不涉及并发的,都是让一个任务顺序执行以确保得到想要的结果.但是,当你的 ...

  6. JSP/SERVLET重定向技术综述

    1.RequestDispatcher.forward() 是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个S ...

  7. Observer Pattern

    Motivation We can not talk about Object Oriented Programming without considering the state of the ob ...

  8. python之self (转)

    首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的.self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数. self名称不是必须的,在python中self ...

  9. 【转】Wireshark:“There are no interfaces on which a capture can be done ”

    linux环境下 两种解决方案:    第一种方法:使用root用户登陆        xiaoshancun@xiaoshancun-VM500:~$ sudo wireshark    第二种方法 ...

  10. 李洪强iOS开发之【零基础学习iOS开发】【02-C语言】02-第一个C语言程序

    前言 前面已经唠叨了这么多理论知识,从这讲开始,就要通过接触代码来学习C语言的语法.学习任何一门语言,首先要掌握的肯定是语法.学习C语言语法的目的:就是能够利用C语言编写程序,然后运行程序跟硬件(计算 ...