bzoj2432

时间:2021-10-30 02:04:49

被虐的体无完肤,

直接给题解地址吧: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 &lbrack;Noi2011&rsqb;兔农

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

  3. 【bzoj2432】【NOI2011】兔农

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

  4. &lbrack;BZOJ2432&rsqb;&lbrack;Noi2011&rsqb;兔农 矩阵乘法&plus;exgcd

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

  5. &lbrack;bzoj2432&rsqb;兔农

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

随机推荐

  1. css 分享之background-attachment 属性

    微分享才发现的css背景图达到的效果代码属性: background-attachment -- 定义背景图片随滚动轴的移动方式: 值 描述 scroll 默认值.背景图像会随着页面其余部分的滚动而移 ...

  2. Python - 属性简介&quot&semi;&lowbar;&lowbar;name&lowbar;&lowbar;&quot&semi;

    模块是对象,并且每个模块都有一个内置属性__name__.当一个模块被直接运行的时候,该模块__name__的值就等于缺省的'__main__'.如果一个模块被import ,那么这个被引入模块__n ...

  3. 必备的 Java 参考资源列表&lpar;转)

    包含必备书籍.站点.博客.活动等参考资源的完整清单级别: 初级 Ted Neward, 主管,ThoughtWorks, Neward & Associates 2009 年 3 月 02 日 ...

  4. lintcode &colon; 跳跃游戏

    跳跃游戏 给出一个非负整数数组,你最初定位在数组的第一个位置. 数组中的每个元素代表你在那个位置可以跳跃的最大长度. 判断你是否能到达数组的最后一个位置. 样例 A = [2,3,1,1,4],返回 ...

  5. POJ 3177 Redundant Paths POJ 3352 Road Construction

    这两题是一样的,代码完全一样. 就是给了一个连通图,问加多少条边可以变成边双连通. 去掉桥,其余的连通分支就是边双连通分支了.一个有桥的连通图要变成边双连通图的话,把双连通子图收缩为一个点,形成一颗树 ...

  6. linux环境下在springboot项目中获取项目路径&lpar;用于保存文件等&rpar;

    //application.properties中设置:(file.path=static/qrfile/)//保存到static文件夹下的qrfile目录@Value("${file.pa ...

  7. hdoj-2066-一个人的旅行&lpar;迪杰斯特拉&rpar;

    一个人的旅行 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  8. QT基础:QMainWindow学习小结

    简述 普通的桌面应用程序有个共同的特性,有菜单栏.工具栏.状态栏.*窗口等部件.菜单栏其实可以看成是一个窗口,菜单栏中的每一个菜单也可以看成一个窗口,每个部件基本都可以认为是一个窗口.那么这些典型的 ...

  9. 【数据库】mysql的安装

    打开下载的mysql安装文件mysql-5.0.27-win32.zip,双击解压缩,运行“setup.exe”,出现如下界面 mysql安装向导启动,按“Next”继续 选择安装类型,有“Typic ...

  10. 北京Uber优步司机奖励政策(12月18日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

相关文章