bzoj2432
被虐的体无完肤,
直接给题解地址吧: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的更多相关文章
- 【BZOJ2432】【NOI2011】兔农(数论,矩阵快速幂)
[BZOJ2432][NOI2011]兔农(数论,矩阵快速幂) 题面 BZOJ 题解 这题\(75\)分就是送的,我什么都不想写. 先手玩一下,发现每次每次出现\(mod\ K=1\)的数之后 把它减 ...
- BZOJ2432 [Noi2011]兔农
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...
- 【bzoj2432】【NOI2011】兔农
题目描述 农夫栋栋近年收入不景气,正在他发愁如何能多赚点钱时,他听到隔壁的小 朋友在讨论兔子繁殖的问题. 问题是这样的:第一个月初有一对刚出生的小兔子,经过两个月长大后,这 对兔子从第三个月开始,每个 ...
- [BZOJ2432][Noi2011]兔农 矩阵乘法+exgcd
2432: [Noi2011]兔农 Time Limit: 10 Sec Memory Limit: 256 MB Description 农夫栋栋近年收入不景气,正在他发愁如何能多赚点钱时,他听到 ...
- [bzoj2432]兔农
将每一个重置为0的点作为一段,那么它会导致后面为以x x为开头的斐波拿起数列的东西,那么设这一段是以x为开头,要快速转移到下一段,就可以解决这道题目为了转移,我们要处理出下面的东西:1.求出x关于模k ...
随机推荐
- iOS10.0 TabBar Bug(底部同时展示原生和自定义tabBar)-b
在没有发布iOS10的时候,在任何模拟器测试下效果正常,更新iOS10后,测试出现BUG先放一张bug之前的效果图: 修改前出现的bug 在检查了所有问题之后,最后把问题定位在了原生系统tabBar底 ...
- android 开发 获取各种intent (图片、apk文件、excel、pdf等文件)
public static Intent openFile(String filePath){ File file = new File(filePath); if(!file.exists()) r ...
- android studio 中设置apk的版本号
今天在mainfest.xml中设置版本号为2,(代码获取到的版本号无效) android:versionCode="2" android:versionName="2. ...
- IntelliJ IDEA 14 利用JRebel实现热部署 二
前言:今天下午和一个qq群里讨论JRebel时,忽然得到“自动部署”的奥秘--真有听君一席话,胜读十年书的感悟. 这是此群友的热部署博客:http://blog.csdn.net/martinkey/ ...
- 编写一个函数,接受三个string参数,s,oldVal和newVal。使用迭代器及insert和erase函数将s中所有oldVal替换为newVal。测试你的程序,用他替换通用的简写形式,如,将“tho”,将“”“”
// test14.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #include< ...
- POJ 3641
Pseudoprime numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6044 Accepted: 24 ...
- 李洪强iOS开发支付集成之微信支付
iOS开发支付集成之微信支付 微信支付也是需要签名的,也跟支付宝一样,可以在客户端签名,也可以在后台签名(当然,为了安全还是推荐在服务器上做签名,逻辑也比较好理解). 1 - 集成前首先要看看文档 开 ...
- CAD导入ArcScene中线被打断 求解决方案
cad中是这样 但在arcscene里中是这样
- 对象的继承关系在数据库中的实现方式和PowerDesigner设计
原文:对象的继承关系在数据库中的实现方式和PowerDesigner设计 在面向对象的编程中,使用对象的继承是一个非常普遍的做法,但是在关系数据库管理系统RDBMS中,使用的是外键表示实体(表)之间的 ...
- windows系统下Python环境的搭建
1.下载最新的Python版本3.5.0.