2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p。 zoj上p是1e9+7,牛客是1e9; 对于这两个,分别有不同的做法。
前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可。 后者mod=1e9,5才mod下没有二次剩余,所以不能这么做了。可以分解mod,然后利用循环节搞。
zoj:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = ;
const LL MOD = ;
LL fac[N],A[N],B[N];
void Init()
{
fac[] = ;
for(int i=; i<N; i++)
fac[i] = fac[i-] * i % MOD;
A[] = B[] = ;
for(int i=; i<N; i++)
{
A[i] = A[i-] * % MOD;
B[i] = B[i-] * % MOD;
}
}
LL quick_mod(LL a,LL b,LL MOD)
{
LL ans = ;
a %= MOD;
while(b){
if(b&){
ans = ans * a % MOD;
b--;
}
b>>=; a = a * a % MOD;
}
return ans;
} LL Solve(LL n,LL k)
{
LL ans = ;
for(int r=; r<=k; r++)
{
LL t = A[k-r] * B[r] % MOD;
LL x = fac[k];
LL y = fac[k-r] * fac[r] % MOD;
LL c = x * quick_mod(y,MOD-,MOD) % MOD;
LL tmp = t * (quick_mod(t,n,MOD) - ) % MOD * quick_mod(t-,MOD-,MOD) % MOD;
if(t == ) tmp = n % MOD;
tmp = tmp * c % MOD;
if(r & ) ans -= tmp;
else ans += tmp;
ans %= MOD;
}
LL m = quick_mod(,MOD-,MOD);
ans = ans * quick_mod(m,k,MOD) % MOD;
ans = (ans % MOD + MOD) % MOD;
return ans;
} int main()
{
int T;
LL n,k;
Init();
scanf("%d",&T);
while(T--)
{
cin>>n>>k;
cout<<Solve(n,k)<<endl;
}
return ;
}
牛客: 你可以不熟悉斐波拉契的循环节具体怎么求,但是只要知道mod=p^a,fib[]%mod的循环节小于p^(a-1)* (2*p+2)。
而1e9计较特殊,1e9=2^9*5^9,这两部分对应的循环节都不是很大,所以我们可以分别求,然后中国剩余定理合并啊,就可以水过去了。
(但是我的代码怎么这么慢啊
#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int Mod=1e9;
int md[]={,};
int f[],ans[];
int qpow(int a,int x,int p)
{
int res=; while(x){
if(x&) res=1LL*res*a%p;
x>>=; a=1LL*a*a%p;
} return res;
}
void exgcd(int a,int b,int &x,int &y)
{
if(b==){ x=; y=; return;}
exgcd(b,a%b,y,x); y-=a/b*x;
}
int rev(int a,int b)
{
int x,y; exgcd(a,b,x,y);
x=(x%b+b)%b; return x;
}
int main()
{
int N,M;
scanf("%d%d",&N,&M);
rep(k,,) {
f[]=; f[]=; int j=;
for(;;j++){
f[j]=(f[j-]+f[j-]);
if(f[j]>=md[k]) f[j]-=md[k];
if(f[j]==&&f[j-]==) {
j--; break;
}
}
int P=N/j;
for(int i=;i<j;i++) {
int t=qpow(f[i],M,md[k]);
ans[k]=(ans[k]+1LL*t*(P+(i<=N%j)))%md[k];
}
}
int res=(1LL*ans[]*md[]%Mod*rev(md[],md[])%Mod+1LL*ans[]*md[]%Mod*rev(md[],md[])%Mod)%Mod;
printf("%d\n",res);
return ;
}
2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)的更多相关文章
- 2019牛客暑期多校训练营(第九场) D Knapsack Cryptosystem
题目 题意: 给你n(最大36)个数,让你从这n个数里面找出来一些数,使这些数的和等于s(题目输入),用到的数输出1,没有用到的数输出0 例如:3 4 2 3 4 输出:0 0 1 题解: 认真想一 ...
- 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)
题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...
- 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)
layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...
- [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第八场)E.Explorer
链接:https://ac.nowcoder.com/acm/contest/888/E来源:牛客网 Gromah and LZR have entered the fifth level. Unli ...
随机推荐
- activiti学习7:spring和activiti进行整合
目录 activiti学习7:spring和activiti进行整合 一.整合原理 二.整合步骤 2.1 新建一个maven工程并导入相关依赖 2.2 创建spring配置文件 三.测试 activi ...
- Thinkphp中的系统变量
Action中使用的系统常量 THINK_PATH // ThinkPHP 系统目录 APP_PATH // 当前项目目录 APP_NAME // 当前项目名称 MODULE_NAME //当前模块名 ...
- 026 Elastic----全文检索技术01---概述及windows安装
用户访问我们的首页,一般都会直接搜索来寻找自己想要购买的商品.而商品的数量非常多,而且分类繁杂.如何能正确的显示出用户想要的商品,并进行合理的过滤,尽快促成交易,是搜索系统要研究的核心.面对这样复杂的 ...
- [转帖]从 SOA 到微服务,企业分布式应用架构在云原生时代如何重塑?
从 SOA 到微服务,企业分布式应用架构在云原生时代如何重塑? 2019-10-08 10:26:28 阿里云云栖社区 阅读数 54 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权 ...
- Scala Operators, File & RegExp
Operators Thread.`yield`() 反引号除了用于命名标识符,还可以在调用方法时避免冲突(yield 为 Scala 关键字,但也是 Thread 的方法) 中缀运算符(infix ...
- Neo4j学习——基本操作(一)
由于开始学习知识图谱,因此需要涉及到neo4j的使用一.介绍neo4j是一个图形数据库基于Java开发而成,因此需要配置jvm才可以运行配置请参考我前面的一篇blog:https://www.cnbl ...
- kubernetes 1.15 有哪些让人眼前一亮的新特性?
原文链接:kubernetes 1.15 有哪些让人眼前一亮的新特性? 2019 年 6 月 20 日,Kubernetes 重磅发布了 1.15 版本,不过笔者忙到现在才有空认真来看一下到底更新了哪 ...
- Java学习:JDBC各类详解
JDBC各个类详解 代码实现: //1.导入驱动jar包 //2.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //3.获取数据库连对象 ...
- VS代码调试出现:当前不会命中断点。还没有为该文档加载任何符号。
第一步:一定要检查最顶部自己设置的是 Release模式还是Debug模式!!!下面这个图就是在我搜了好多解决方式之后,突然发现自己开的是Release模式!!!吐血. 第二步:如果你已经确定了自己是 ...
- jQuery中使用Ajax获取JSON格式数据示例代码
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式.JSONM文件中包含了关于“名称”和“值”的信息.有时候我们需要读取JSON格式的数据文件,在jQuery中 ...