题目链接

这道题, 给我的最大的知识点就是对于去模运算,一定可以找到循环节,这题只不过是嵌套了两层,可以分别找到循环节。关于这题如何找循环节的,直接暴力,网上也有很多。

找到循环节之后,另一个知识点就是对于线性关系可以使用矩阵快速幂来加速。

附上代码:

 /*************************************************************************
> File Name: 4292.cpp
> Author: Stomach_ache
> Mail: 1179998621@qq.com
> Created Time: 2014年04月20日 星期日 22时06分59秒
> Propose:
************************************************************************/
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <string>
#include <cstdio>
#include <fstream> using namespace std; #define MOD1 (1000000007)
#define MOD2 (222222224)
#define MOD3 (183120) typedef long long LL; struct Matrix {
LL a[][];
//Matrix(int m):n(m){memset(a, 0, sizeof(a));}
inline Matrix multiply(Matrix& y, LL mod) {
Matrix ret;
for (LL i = ; i < ; i++) {
for (LL j = ; j < ; j++) {
LL tmp = ;
for (LL k = ; k < ; k++) {
tmp = (tmp+a[i][k]*y.a[k][j])%mod;
//ret.a[i][j] = (ret.a[i][j]+tmp)%mod;
}
ret.a[i][j] = tmp;
}
} return ret;
}
}; Matrix power_mod(Matrix x, LL y, LL mod) {
Matrix ans;
ans.a[][] = ans.a[][] = ;
ans.a[][] = ans.a[][] = ;
while (y) {
if (y % ) {
ans = ans.multiply(x, mod);
}
x = x.multiply(x, mod);
y /= ;
} return ans;
} int main(void) {
Matrix A;
A.a[][] = ;
A.a[][] = ;
A.a[][] = ;
A.a[][] = ;
LL n;
while (cin >> n) {
if (n == || n == ) {
cout << n << endl;
continue;
}
Matrix tmp1 = power_mod(A, n-, MOD3);
n = tmp1.a[][];
if (n != && n != ) {
tmp1 = power_mod(A, n-, MOD2);
n = tmp1.a[][];
}
if (n != && n != ) {
tmp1 = power_mod(A, n-, MOD1);
n = tmp1.a[][];
}
cout << n << endl;
}
return ;
}

Hdu 4291的更多相关文章

  1. 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/showp ...

  2. hdu 4291 矩阵幂 循环节

    http://acm.hdu.edu.cn/showproblem.php?pid=4291 凡是取模的都有循环节-----常数有,矩阵也有,并且矩阵的更奇妙: g(g(g(n))) mod 109  ...

  3. hdu 4291(矩阵+暴力求循环节)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4291 思路:首先保留求出循环节,然后就是矩阵求幂了. #include<iostream> ...

  4. hdu 4291 2012成都赛区网络赛 矩阵快速幂 ***

    分析:假设g(g(g(n)))=g(x),x可能非常大,但是由于mod 10^9+7,所以可以求出x的循环节 求出x的循环节后,假设g(g(g(n)))=g(x)=g(g(y)),即x=g(y),y也 ...

  5. hdu 4291 A Short problem

    数学题,找循环节!! 首先g(g(g(n)))=g(x) mod 1e9+7 则可知x有循环节1e9+7; 之后x=g(g(n)),则可算出g(n)的循环节,在算出n的循环节就可以了!! 代码如下: ...

  6. hdu 4291 A Short problem(矩阵+取模循环节)

    A Short problem                                                          Time Limit: 2000/1000 MS (J ...

  7. HDU 4291 A Short problem(矩阵+循环节)

    A Short problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  8. HDU - 4291 循环节

    还有这种操作? #include<bits/stdc++.h> #define rep(i,j,k) for(register int i=j;i<=k;i++) #define p ...

  9. HDU 4291 A Short problem 短问题 (递推,找规律)

    题意: 给出递推式 g(n) = 3g(n - 1) + g(n - 2),且g(1) = 1,g(0) = 0.求g( g( g(n))) mod 109 + 7. 思路: 要求的g( g( g(n ...

  10. 循环节 + 矩阵快速幂 - HDU 4291 A Short problem

    A Short problem Problem's Link Mean: 给定一个n,求:g(g(g(n))) % 1000000007 其中:g(n) = 3g(n - 1) + g(n - 2), ...

随机推荐

  1. Activiti实战01_认识Activiti

    什么是Activiti Activiti是为解决工作流而创建的一套流程引擎.举个最简单的例子,请假流程就是一个工作流,从开始到审批到结束,像流一样的贯穿整个流程.在工作中最常见的就是OA了.工作流总是 ...

  2. 引爆潮流技术 Vue+Django REST framework打造生鲜电商项目

    引爆潮流技术Vue+Django REST framework打造生鲜电商项目 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受, ...

  3. Django项目: 项目环境搭建 ---- 一、创建django项目

    项目环境搭建 一.创建django项目 1.创建python虚拟环境 在虚拟机上创建python虚拟环境,因为实际项目部署,实在linux mkvirtualenv -p /usr/bin/pytho ...

  4. Idea SSH框架整合基础代码

    第一步 pom.xml注入jar包依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...

  5. python中os的常用方法

    1.os模块:os模块在python中包含普遍的操作系统功能,下面列出了一些在os模块中比较有用的部分. os.sep可以取代操作系统特定的路径分隔符.windows下为 “\\” os.name字符 ...

  6. Kotlin 委托(1)类委托、变量委托注意事项

    1.官方文档 英文: https://kotlinlang.org/docs/reference/delegation.html https://kotlinlang.org/docs/referen ...

  7. 【python之路39】Python 正则表达式

    Python 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. r ...

  8. 在centos 6.3系统下安装java、tomcat环境的方法与步骤(方法经过验证,可安装成功)

    一.安装java1. 下载java二进制安装包 wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http ...

  9. Linux下安装jboss并设置自启动服务

    一.JDK和JBOSS下载jdk:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm ...

  10. 避免SQL注入三慷慨法

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/wangyy130/article/details/26154837       要说SQL注入还要从 ...