HDU 4291 A Short problem(2012 ACM/ICPC Asia Regional Chengdu Online)
HDU 4291 A Short problem(2012 ACM/ICPC Asia Regional Chengdu Online)
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4291
Description
给一个式子求结果。类似Fibonacci的公式g(n)=3*g(n-1)+g[n-2]。
Input
给你n(1<=n<=1e18)
Output
求g(g(g(n)))
Sample Input
样例第一个就是0什么鬼,虽然没影响。
0
1
2
Sample Output
0
1
42837
题意:
如公式所示
题解:
这题首先类似Fibonacci数列,那么首先是使用矩阵快速幂。然后就是坑爹的取模,首先我们可以知道到对于最后的结果是对1e9+7取模。但还是不能明白为什么要分别取模,我的理解是如果在内层取模过大那么取出的循环节就有问题,而题目要求的是对最后的结果取模。
来自其他人的讲解,首先对于g(g(g(x)))对于mod1(1e9+7)取模,那么首先我们找出了循环节mod2即我们可以知道g(g(g(x)))%mod1 = (g(g(x)) - k * mod2)%mod1,同理我们可以得到
对于最内层g(x)的循环节。
代码:
#include <bits/stdc++.h>
using namespace std;
const long long mod1 = 1000000007;
const long long mod2 = 222222224;
const long long mod3 = 183120;
struct Matrix{
long long a,b;
long long c,d;
};
Matrix Mul(Matrix A,Matrix B,long long p)
{
Matrix ret;
ret.a = (A.a*B.a%p + A.b*B.c%p)%p;
ret.b = (A.a*B.b%p + A.b*B.d%p)%p;
ret.c = (A.c*B.a%p + A.d*B.c%p)%p;
ret.d = (A.c*B.b%p + A.d*B.d%p)%p;
return ret;
}
long long f(long long n,long long p)
{
Matrix ret;
ret.a = 1;ret.b = ret.c = 0;ret.d = 1;
Matrix acc;
acc.a = 3;acc.b = acc.c = 1;acc.d = 0;
while (n){
if (n&1)
ret = Mul(ret,acc,p);
n >>= 1;
acc = Mul(acc,acc,p);
}
return ret.a;
}
int main()
{
long long n;
while (~scanf("%lld",&n)){
if (n >= 2) n = f(n-1,mod3);
if (n >= 2) n = f(n-1,mod2);
if (n >= 2) n = f(n-1,mod1);
printf("%lld\n",n);
}
return 0;
}
HDU 4291 A Short problem(2012 ACM/ICPC Asia Regional Chengdu Online)的更多相关文章
- Problem 1002-2017 ACM/ICPC Asia Regional Shenyang Online
网络赛:2017 ACM/ICPC Asia Regional Shenyang Online 题目来源:cable cable cable Problem Description: Connecti ...
- HDU 4031 Attack(离线+线段树)(The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4031 Problem Description Today is the 10th Annual of ...
- hdu 5877 线段树(2016 ACM/ICPC Asia Regional Dalian Online)
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
- HDU 4729 An Easy Problem for Elfness(主席树)(2013 ACM/ICPC Asia Regional Chengdu Online)
Problem Description Pfctgeorge is totally a tall rich and handsome guy. He plans to build a huge wat ...
- 【动态规划】HDU 5492 Find a path (2015 ACM/ICPC Asia Regional Hefei Online)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5492 题目大意: 一个N*M的矩阵,一个人从(1,1)走到(N,M),每次只能向下或向右走.求(N+ ...
- HDU 4758——Walk Through Squares——2013 ACM/ICPC Asia Regional Nanjing Online
与其说这是一次重温AC自动机+dp,倒不如说这是个坑,而且把队友给深坑了. 这个题目都没A得出来,我只觉得我以前的AC自动机的题目都白刷了——深坑啊. 题目的意思是给你两个串,每个串只含有R或者D,要 ...
- Hdu 5459 Jesus Is Here (2015 ACM/ICPC Asia Regional Shenyang Online) 递推
题目链接: Hdu 5459 Jesus Is Here 题目描述: s1 = 'c', s2 = 'ff', s3 = s1 + s2; 问sn里面所有的字符c的距离是多少? 解题思路: 直觉告诉我 ...
- HDU 5010 Get the Nut(2014 ACM/ICPC Asia Regional Xi'an Online)
思路:广搜, 因为空格加上动物最多只有32个那么对这32个进行编号,就能可以用一个数字来表示状态了,因为只有 ‘P’ 'S' 'M' '.' 那么就可以用4进制刚好可以用64位表示. 接下去每次就 ...
- hdu 4751 Divide Groups bfs (2013 ACM/ICPC Asia Regional Nanjing Online 1004)
SDUST的训练赛 当时死磕这个水题3个小时,也无心去搞其他的 按照题意,转换成无向图,预处理去掉单向的边,然后判断剩下的图能否构成两个无向完全图(ps一个完全图也行或是一个完全图+一个孤点) 代码是 ...
随机推荐
- SQL 使用存储过程创建报表的一点体会
以前创建报表的时候都是采用视图的方式来实现的,通过把关联的表字段选取后形成需要的报表,用起来也比较方便. 最近也尝试用存储过程来做一些开发,确实也方便不少,因为很多逻辑关系都可以灵活的在SQL来实现, ...
- Arduino 各种模块篇 蓝牙模块 手机蓝牙控制Arduino LED灯
解决方案. 条件: 1.手机android 商店下载 blueTerm 2.向arduino中载入如下代码: char val; ; void setup() { Serial.begin(); pi ...
- android动画特效之解决解决移动后闪烁现象,解决输入法弹出后位置回复原状,解决两个动画叠加
以下代码实现的效果是: BoundOpenView从居中移动到顶部,移动完后,BoundSendView从隐藏变为显示,并从顶部移动BoundOpenView下方20dp处,同时透明度慢慢增加. pr ...
- Python 入门介绍
写在前面 开始介绍Python之前, 先回顾一下编译型语言和解释型语言的概念和区别. 计算机能直接识别只能是机器语言, 所以使用高级语言编写的程序必须翻译成机器语言,计算机才能执行. 翻译的方式有两种 ...
- sql数据黑马程序员——SQL入门
最近研究sql数据,稍微总结一下,以后继续补充: ---------------------- ASP.Net+Android+IO开辟S..Net培训.等待与您交流! --------------- ...
- 以helloworld为例讲解magento中控制器的工作
1.下面介绍的前提是你已经安装了magento ,版本是1.9.1.0. 2.下面是实际步骤 ①在工程下面创建下面的文件目录 app/code/local/Magentotutorial/Hellow ...
- POSIX多线程——基本线程管理函数介绍
POSIX基本的几个线程管理函数见下表: ------------------------------------------------------------------------------- ...
- c#-委托,匿名方法,lambda表达的关系
什么是委托: 包含单个方法的委托和函数指针是相似的,不同的是,委托是面向帝乡的并且是类型安全的 声明委托类型: delegate void mydel(int x); 声明委托和声明方法差不多,两个不 ...
- JS监听页面关闭
JS可以监听浏览器页面的关闭,主要使用了window对象的onbeforeunload方法 在以前(旧版本的浏览器中),可以自定义提示文案 window.onbeforeunload = functi ...
- 办理西蒙菲莎大学(本科)学历认证『微信171922772』SFU学位证成绩单使馆认证Simon Fraser University
办理西蒙菲莎大学(本科)学历认证『微信171922772』SFU学位证成绩单使馆认证Simon Fraser University Q.微信:171922772办理教育部国外学历学位认证海外大学毕业证 ...
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4291
Description
给一个式子求结果。类似Fibonacci的公式g(n)=3*g(n-1)+g[n-2]。
Input
给你n(1<=n<=1e18)
Output
求g(g(g(n)))
Sample Input
样例第一个就是0什么鬼,虽然没影响。
0
1
2
Sample Output
0
1
42837
题意:
如公式所示
题解:
这题首先类似Fibonacci数列,那么首先是使用矩阵快速幂。然后就是坑爹的取模,首先我们可以知道到对于最后的结果是对1e9+7取模。但还是不能明白为什么要分别取模,我的理解是如果在内层取模过大那么取出的循环节就有问题,而题目要求的是对最后的结果取模。
来自其他人的讲解,首先对于g(g(g(x)))对于mod1(1e9+7)取模,那么首先我们找出了循环节mod2即我们可以知道g(g(g(x)))%mod1 = (g(g(x)) - k * mod2)%mod1,同理我们可以得到
对于最内层g(x)的循环节。
代码:
#include <bits/stdc++.h>
using namespace std;
const long long mod1 = 1000000007;
const long long mod2 = 222222224;
const long long mod3 = 183120;
struct Matrix{
long long a,b;
long long c,d;
};
Matrix Mul(Matrix A,Matrix B,long long p)
{
Matrix ret;
ret.a = (A.a*B.a%p + A.b*B.c%p)%p;
ret.b = (A.a*B.b%p + A.b*B.d%p)%p;
ret.c = (A.c*B.a%p + A.d*B.c%p)%p;
ret.d = (A.c*B.b%p + A.d*B.d%p)%p;
return ret;
}
long long f(long long n,long long p)
{
Matrix ret;
ret.a = 1;ret.b = ret.c = 0;ret.d = 1;
Matrix acc;
acc.a = 3;acc.b = acc.c = 1;acc.d = 0;
while (n){
if (n&1)
ret = Mul(ret,acc,p);
n >>= 1;
acc = Mul(acc,acc,p);
}
return ret.a;
}
int main()
{
long long n;
while (~scanf("%lld",&n)){
if (n >= 2) n = f(n-1,mod3);
if (n >= 2) n = f(n-1,mod2);
if (n >= 2) n = f(n-1,mod1);
printf("%lld\n",n);
}
return 0;
}
网络赛:2017 ACM/ICPC Asia Regional Shenyang Online 题目来源:cable cable cable Problem Description: Connecti ...
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4031 Problem Description Today is the 10th Annual of ...
Weak Pair Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total ...
Problem Description Pfctgeorge is totally a tall rich and handsome guy. He plans to build a huge wat ...
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5492 题目大意: 一个N*M的矩阵,一个人从(1,1)走到(N,M),每次只能向下或向右走.求(N+ ...
与其说这是一次重温AC自动机+dp,倒不如说这是个坑,而且把队友给深坑了. 这个题目都没A得出来,我只觉得我以前的AC自动机的题目都白刷了——深坑啊. 题目的意思是给你两个串,每个串只含有R或者D,要 ...
题目链接: Hdu 5459 Jesus Is Here 题目描述: s1 = 'c', s2 = 'ff', s3 = s1 + s2; 问sn里面所有的字符c的距离是多少? 解题思路: 直觉告诉我 ...
思路:广搜, 因为空格加上动物最多只有32个那么对这32个进行编号,就能可以用一个数字来表示状态了,因为只有 ‘P’ 'S' 'M' '.' 那么就可以用4进制刚好可以用64位表示. 接下去每次就 ...
SDUST的训练赛 当时死磕这个水题3个小时,也无心去搞其他的 按照题意,转换成无向图,预处理去掉单向的边,然后判断剩下的图能否构成两个无向完全图(ps一个完全图也行或是一个完全图+一个孤点) 代码是 ...
以前创建报表的时候都是采用视图的方式来实现的,通过把关联的表字段选取后形成需要的报表,用起来也比较方便. 最近也尝试用存储过程来做一些开发,确实也方便不少,因为很多逻辑关系都可以灵活的在SQL来实现, ...
解决方案. 条件: 1.手机android 商店下载 blueTerm 2.向arduino中载入如下代码: char val; ; void setup() { Serial.begin(); pi ...
以下代码实现的效果是: BoundOpenView从居中移动到顶部,移动完后,BoundSendView从隐藏变为显示,并从顶部移动BoundOpenView下方20dp处,同时透明度慢慢增加. pr ...
写在前面 开始介绍Python之前, 先回顾一下编译型语言和解释型语言的概念和区别. 计算机能直接识别只能是机器语言, 所以使用高级语言编写的程序必须翻译成机器语言,计算机才能执行. 翻译的方式有两种 ...
最近研究sql数据,稍微总结一下,以后继续补充: ---------------------- ASP.Net+Android+IO开辟S..Net培训.等待与您交流! --------------- ...
1.下面介绍的前提是你已经安装了magento ,版本是1.9.1.0. 2.下面是实际步骤 ①在工程下面创建下面的文件目录 app/code/local/Magentotutorial/Hellow ...
POSIX基本的几个线程管理函数见下表: ------------------------------------------------------------------------------- ...
什么是委托: 包含单个方法的委托和函数指针是相似的,不同的是,委托是面向帝乡的并且是类型安全的 声明委托类型: delegate void mydel(int x); 声明委托和声明方法差不多,两个不 ...
JS可以监听浏览器页面的关闭,主要使用了window对象的onbeforeunload方法 在以前(旧版本的浏览器中),可以自定义提示文案 window.onbeforeunload = functi ...
办理西蒙菲莎大学(本科)学历认证『微信171922772』SFU学位证成绩单使馆认证Simon Fraser University Q.微信:171922772办理教育部国外学历学位认证海外大学毕业证 ...