NOI2011 兔农
http://www.lydsy.com/JudgeOnline/problem.php?id=2432
感觉是day1中最难的一题,还好出题人很良心,给了75分部分分。
还是跪拜策爷吧~Orz
http://jcvb.is-programmer.com/posts/39528.html
代码奇丑。。。。。。
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<cstring>
#include<string>
#include<cmath>
#include<queue>
#include<stack>
#include<map>
#include<utility>
#include<set>
#include<bitset>
#include<vector>
#include<functional>
#include<deque>
#include<cctype>
#include<climits>
#include<complex>
//#include<bits/stdc++.h>适用于CF,UOJ,但不适用于poj using namespace std; typedef long long LL;
typedef double DB;
typedef pair<int,int> PII;
typedef complex<DB> CP; #define mmst(a,v) memset(a,v,sizeof(a))
#define mmcy(a,b) memcpy(a,b,sizeof(a))
#define re(i,a,b) for(i=a;i<=b;i++)
#define red(i,a,b) for(i=a;i>=b;i--)
#define fi first
#define se second
#define m_p(a,b) make_pair(a,b)
#define SF scanf
#define PF printf
#define two(k) (1<<(k)) template<class T>inline T sqr(T x){return x*x;}
template<class T>inline void upmin(T &t,T tmp){if(t>tmp)t=tmp;}
template<class T>inline void upmax(T &t,T tmp){if(t<tmp)t=tmp;} const DB EPS=1e-;
inline int sgn(DB x){if(abs(x)<EPS)return ;return(x>)?:-;}
const DB Pi=acos(-1.0); inline int gint()
{
int res=;bool neg=;char z;
for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
if(z==EOF)return ;
if(z=='-'){neg=;z=getchar();}
for(;z!=EOF && isdigit(z);res=res*+z-'',z=getchar());
return (neg)?-res:res;
}
inline LL gll()
{
LL res=;bool neg=;char z;
for(z=getchar();z!=EOF && z!='-' && !isdigit(z);z=getchar());
if(z==EOF)return ;
if(z=='-'){neg=;z=getchar();}
for(;z!=EOF && isdigit(z);res=res*+z-'',z=getchar());
return (neg)?-res:res;
} const LL maxK=; LL N,K,P;
LL fib[*maxK+];
LL pos[maxK+];
LL len[maxK+],next[maxK+]; inline LL gcd(LL a,LL b){return b== ? a : gcd(b,a%b); }
inline void extend_gcd(LL a,LL &x,LL b,LL &y)
{
if(b==){x=;y=;return;}
LL dx,dy;
extend_gcd(b,dx,a%b,dy);
x=dy;
y=dx-a/b*dy;
} struct Tmatrix
{
int n,m;
LL v[][];
inline void clear(){n=m=;mmst(v,);}
inline friend Tmatrix operator *(Tmatrix a,Tmatrix b)
{
int i,j,k;
Tmatrix c;c.clear();
c.n=a.n;c.m=b.m;
re(i,,c.n)re(j,,c.m)re(k,,a.m)c.v[i][j]=(c.v[i][j]+a.v[i][k]*b.v[k][j]%P)%P;
return c;
}
}; Tmatrix A,B; inline Tmatrix power(Tmatrix a,LL k)
{
int i;
Tmatrix x,y=a;
x.clear();x.n=x.m=a.n;re(i,,a.n)x.v[i][i]=;
for(;k!=;k>>=){if(k&)x=x*y;y=y*y;}
return x;
} int flag[maxK+]; int main()
{
/*freopen("rabbit.in","r",stdin);
freopen("rabbit.out","w",stdout);*/
LL i;
N=gll();K=gll();P=gll();
fib[]=fib[]=;
for(i=;;i++)
{
fib[i]=(fib[i-]+fib[i-])%K;
if(!pos[fib[i]])pos[fib[i]]=i;
if(fib[i]== && fib[i-]==)break;
}
re(i,,K-)
{
LL x,y;
if(gcd(i,K)==)
{
extend_gcd(i,x,K,y);
x=(x%K+K)%K;
if(pos[x]==)
{
len[i]=-;
next[i]=-;
}
else
{
len[i]=pos[x];
next[i]=i*fib[len[i]-]%K;
}
}
else
len[i]=-,next[i]=-;
}
A.clear();
A.n=A.m=;
A.v[][]=;A.v[][]=;A.v[][]=;
A.v[][]=;A.v[][]=;A.v[][]=;
A.v[][]=;A.v[][]=;A.v[][]=;
B.clear();
B.n=B.m=;
B.v[][]=;B.v[][]=;B.v[][]=-;
B.v[][]=;B.v[][]=;B.v[][]=;
B.v[][]=;B.v[][]=;B.v[][]=; int p,t;
for(p=;!flag[p] && next[p]!=-;flag[p]=,p=next[p]);
if(next[p]!=-)
{
LL lenX=,lenY=;Tmatrix X,Y,Z;
X.clear();X.n=X.m=;X.v[][]=X.v[][]=X.v[][]=;
for(t=;t!=p;t=next[t])X=B*power(A,len[t])*X,lenX+=len[t];
if(N>=lenX)
{
Y.clear();Y.n=Y.m=;Y.v[][]=Y.v[][]=Y.v[][]=;
for(t=p,Y=B*power(A,len[t])*Y,lenY+=len[t],t=next[t];t!=p;t=next[t])Y=B*power(A,len[t])*Y,lenY+=len[t];
Z=power(Y,(N-lenX)/lenY)*X;
N=(N-lenX)%lenY;
for(t=p;;t=next[t])
if(N>=len[t])
{
Z=B*power(A,len[t])*Z;
N-=len[t];
}
else break;
LL y=(Z.v[][]+Z.v[][])%P,x=(Z.v[][]+Z.v[][])%P;
Y.clear();
Y.n=Y.m=;
Y.v[][]=;Y.v[][]=;
Y.v[][]=;Y.v[][]=;
Z=power(Y,N);
LL res=(Z.v[][]*y%P+Z.v[][]*x%P)%P;
cout<<(res%P+P)%P<<endl;
}
else
{
X.clear();X.n=X.m=;X.v[][]=X.v[][]=X.v[][]=;
for(t=;t!=p;t=next[t])
if(N>=len[t])
{
X=B*power(A,len[t])*X;
N-=len[t];
}
else break;
LL y=(X.v[][]+X.v[][])%P,x=(X.v[][]+X.v[][])%P;
Y.clear();
Y.n=Y.m=;
Y.v[][]=;Y.v[][]=;
Y.v[][]=;Y.v[][]=;
Z=power(Y,N);
LL res=(Z.v[][]*y%P+Z.v[][]*x%P)%P;
cout<<(res%P+P)%P<<endl;
}
}
else
{
LL lenX=;Tmatrix X,Y,Z;
X.clear();X.n=X.m=;X.v[][]=X.v[][]=X.v[][]=;
for(t=;t!=p;t=next[t])X=B*power(A,len[t])*X,lenX+=len[t];
if(N>=lenX)
{
LL y=(X.v[][]+X.v[][])%P,x=(X.v[][]+X.v[][])%P;
N-=lenX;
Y.clear();
Y.n=Y.m=;
Y.v[][]=;Y.v[][]=;
Y.v[][]=;Y.v[][]=;
Z=power(Y,N);
LL res=(Z.v[][]*y%P+Z.v[][]*x%P)%P;
cout<<(res%P+P)%P<<endl;
}
else
{
X.clear();X.n=X.m=;X.v[][]=X.v[][]=X.v[][]=;
for(t=;t!=p;t=next[t])
if(N>=len[t])
{
X=B*power(A,len[t])*X;
N-=len[t];
}
else break;
LL y=(X.v[][]+X.v[][])%P,x=(X.v[][]+X.v[][])%P;
Y.n=Y.m=;
Y.v[][]=;Y.v[][]=;
Y.v[][]=;Y.v[][]=;
Z=power(Y,N);
LL res=(Z.v[][]*y%P+Z.v[][]*x%P)%P;
cout<<(res%P+P)%P<<endl;
}
}
return ;
}
NOI2011 兔农的更多相关文章
- [BZOJ2432][Noi2011]兔农 矩阵乘法+exgcd
		2432: [Noi2011]兔农 Time Limit: 10 Sec Memory Limit: 256 MB Description 农夫栋栋近年收入不景气,正在他发愁如何能多赚点钱时,他听到 ... 
- BZOJ2432 [Noi2011]兔农
		本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ... 
- 2432: [Noi2011]兔农 - BZOJ
		Description 农夫栋栋近年收入不景气,正在他发愁如何能多赚点钱时,他听到隔壁的小朋友在讨论兔子繁殖的问题. 问题是这样的:第一个月初有一对刚出生的小兔子,经过两个月长大后,这对兔子从第三个月 ... 
- 【BZOJ 2432】 [Noi2011]兔农 矩乘+数论
		这道题的暴力分还是很良心嘛~~~~~ 直接刚的话我发现本蒟蒻只会暴力,矩乘根本写不出来,然后让我们找一下规律,我们发现如果我们把这个序列在mod k的意义下摆出,并且在此过程中把值为1的的数减一,我们 ... 
- 【BZOJ2432】【NOI2011】兔农(数论,矩阵快速幂)
		[BZOJ2432][NOI2011]兔农(数论,矩阵快速幂) 题面 BZOJ 题解 这题\(75\)分就是送的,我什么都不想写. 先手玩一下,发现每次每次出现\(mod\ K=1\)的数之后 把它减 ... 
- 【BZOJ 2437】 2437: [Noi2011]兔兔与蛋蛋 (博弈+二分图匹配**)
		未经博主同意不得转载 2437: [Noi2011]兔兔与蛋蛋 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 693 Solved: 442 Des ... 
- bzoj 2437[Noi2011]兔兔与蛋蛋  黑白染色二分图+博弈+匈牙利新姿势
		noi2011 兔兔与蛋蛋 题目大意 直接看原题吧 就是\(n*m\)的格子上有一些白棋和一些黑棋和唯一一个空格 兔兔先手,蛋蛋后手 兔兔要把与空格相邻的其中一个白棋移到空格里 蛋蛋要把与空格相邻的其 ... 
- 【bzoj2432】【NOI2011】兔农
		题目描述 农夫栋栋近年收入不景气,正在他发愁如何能多赚点钱时,他听到隔壁的小 朋友在讨论兔子繁殖的问题. 问题是这样的:第一个月初有一对刚出生的小兔子,经过两个月长大后,这 对兔子从第三个月开始,每个 ... 
- 【NOI2011】兔农(循环节)
		我居然没看题解瞎搞出来了? 题解: 不难想到找到每次减1的位置,然后减去它对最终答案的贡献. 假设有一个地方是\(x,1(mod~k)\) 那么减了1后就变成了\(x,0\). 然后可以推到\(x,0 ... 
随机推荐
- libvirt-adabddad
			kvm i686 libvirtError: internal error cannot load AppArmor profile 'libvirt-adabddad-35ba-b9ca-e250 ... 
- Java毫秒转换成日期格式
			import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.uti ... 
- 从此走上一条iOS程序猿不归路。。。
			新的城市,新的生活!前不久刚刚结束了苦逼的面试找工作之旅,期间也小有收货,如今正处年底工作闲暇之余,将前一阵子陆陆续续的总结整理了一下,本人菜鸟程序猿一只,水平有限,本文总结的知识不算深入,比较浅显, ... 
- 解析了grid2008的代码
			import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.L ... 
- 【MySQL】关于MySQL错误日志信息的收集
			为方便维护MySQL,写了个脚本用以提供收集错误信息的接口.这些错误信息来自与MySQL错误日志,而 通过grep mysql可以获取error-log的路径. #!/usr/bin/env pyth ... 
- Java 将自己定义的对象作为HashMap的key
			须要继承Map的equals函数和hashCode函数 package com.category; import java.util.HashMap; public class GenCategory ... 
- 解决蛋疼的阿里云单CPU使用率的问题。
			工作中涉及到阿里云的应用.在性能测试阶段,压测过程中只要一个CPU未使用满,第二个CPU以至于第三个和第四个CPU完全用不到. 后来和阿里云的同事沟通他们现在用的是单队列的网卡,只能靠RPS/RFS这 ... 
- Panel( 面板) 组件 上
			一. 加载方式//class 加载方式<div class="easyui-panel" data-options="closable:true"titl ... 
- 2.RxJava详解网址http
			RxJava 到底是什么 RxJava 好在哪 API 介绍和原理简析 1) Scheduler 的 API (二) 2) Scheduler 的原理(二) 3) 延伸:doOnSubscribe() ... 
- Android Intent到底能做些什么
			Android Intent到底能做些什么 原文:http://www.toutiao.com/i6348296465147757058/?tt_from=mobile_qq&utm_camp ... 
