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一个完全图也行或是一个完全图+一个孤点) 代码是 ...
随机推荐
- rabbitmq在mac上安装
1.安装brew 打开http://bash.sh 执行 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/ ...
- 跨站脚本攻击(Cross‐Site Scripting (XSS))
跨站脚本攻击(Cross‐Site Scripting (XSS)) 跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是 ...
- 分享.net常见的内存泄露及解决方法
分享.net常见的内存泄露及解决方法 关于内存泄漏的问题,之前也为大家介绍过,比如:<C++中内存泄漏的检测方法介绍>,是关于C++内存泄漏的.今天为大家介绍的是关于.NET内存泄漏的问题 ...
- Chrome插件i18n多语言实现
i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称.Chrome插件框架中i18n的封装API: chrome.i18n.ge ...
- sql server常有的问题-实时错误'91' 对象变量或with块变量未设置
这样的问题,对于我们这样的初学者来说,无疑是一个接触sql server后第一个艰难的问题,“实时错误'91' 对象变量或with块变量未设置”这句话到底透露出什么信息?直至写此博文,我依然看不出什么 ...
- poj1872A Dicey Problem
Home Problems Status Contest 284:28:39 307:00:00 Overview Problem Status Rank A B C D E F G H ...
- Java 在本地文件中查找固定字符串
适用范围:只适用于在文本文档中查找(如,txt.java.c等等,并不适用与doc.xls等等这些文件),可嵌套文件夹.但是对中文不支持. 例如:文件夹:F:/demo 子文件夹:F:/demo/er ...
- git shell 常用命令
git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看远程所有分支 git ...
- php文件上传及头像预览
php文件上传原理是通过form表单的enctype="multipart/form-data"属性将文件临时放到wamp文件夹中的tmp目录下,再通过后台php 程序将文件保存在 ...
- android两种方式获取AsyncTask返回值
获取AsyncTask返回值,在Activity中使用. 引用链接:https://www.oschina.net/code/snippet_725438_49858#72630 [1].[代码] [ ...
题目链接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一个完全图也行或是一个完全图+一个孤点) 代码是 ...
1.安装brew 打开http://bash.sh 执行 ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/ ...
跨站脚本攻击(Cross‐Site Scripting (XSS)) 跨站脚本攻击(Cross‐Site Scripting (XSS)) XSS(Cross Site Script)跨站脚本攻击.是 ...
分享.net常见的内存泄露及解决方法 关于内存泄漏的问题,之前也为大家介绍过,比如:<C++中内存泄漏的检测方法介绍>,是关于C++内存泄漏的.今天为大家介绍的是关于.NET内存泄漏的问题 ...
i18n(其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称.Chrome插件框架中i18n的封装API: chrome.i18n.ge ...
这样的问题,对于我们这样的初学者来说,无疑是一个接触sql server后第一个艰难的问题,“实时错误'91' 对象变量或with块变量未设置”这句话到底透露出什么信息?直至写此博文,我依然看不出什么 ...
Home Problems Status Contest 284:28:39 307:00:00 Overview Problem Status Rank A B C D E F G H ...
适用范围:只适用于在文本文档中查找(如,txt.java.c等等,并不适用与doc.xls等等这些文件),可嵌套文件夹.但是对中文不支持. 例如:文件夹:F:/demo 子文件夹:F:/demo/er ...
git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支 git branch -r 查看远程所有分支 git ...
php文件上传原理是通过form表单的enctype="multipart/form-data"属性将文件临时放到wamp文件夹中的tmp目录下,再通过后台php 程序将文件保存在 ...
获取AsyncTask返回值,在Activity中使用. 引用链接:https://www.oschina.net/code/snippet_725438_49858#72630 [1].[代码] [ ...