题目链接

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

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

附上代码:

 /*************************************************************************
> 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. Action详解

    简介 Action 是用于处理请求操作的,它是由 StrutsPrepareAndExecuteFilter 分发过来的. 在 Struts2 框架中,Action 是框架的核心类,被称为业务逻辑控制 ...

  2. PL/SQl连接数据库ORA-12154错误

    先说说我遇到的问题: 1.在sql/plus下可以正确连接到数据库(oracle10g): 2.检查我机器(64)位环境变量的配置,没问题.path环境变量没问题(C:\oraclexe\app\or ...

  3. require模块开发(一)

    1.require下载和加载 1.1 下载 工欲善其事必先利其器,先下载require.js下载地址, 然后添加 require.js 到 scripts 目录 1.2 加载 然后加载require ...

  4. 关于maven 把插件依赖一起打包进jar问题

    今天在做storm on maven的时候发现要依赖到storm-hdfs的jar.自己又非常不想把乱七八糟的东西丢上自己的集群lib.于是就想maven 打包的时候把插件一块打包进jar.maven ...

  5. 过滤html标签的一个函数

    str_replace(array(' ', '&', '"', ''', '“', '”', '—', '<', '>', '·', '…', '&'), ar ...

  6. hdu 2586 (lca-RMQ)

    #include <iostream> #include <cstdlib> #include <cstring> #include <queue> # ...

  7. java习题-集合框架-泛型

    集合框架 一 去除List集合中的重复元素. 思路: 1,先创建一个临时容器.用于存储唯一性的元素.2,遍历原容器,将遍历到的元素到临时容器中去判断,是否存在.3,如果存在,不存储到临时容器,如果不存 ...

  8. java利用JXL导出/生成 EXCEL【my】

    一.创建一个excel文件 package test;// 生成Excel的类 import java.io.File; import jxl.Workbook;import jxl.write.La ...

  9. 通过inputSplit分片size控制map数目

    前言:在具体执行Hadoop程序的时候,我们要根据不同的情况来设置Map的个数.除了设置固定的每个节点上可运行的最大map个数外,我们还需要控制真正执行Map操作的任务个数. 1.如何控制实际运行的m ...

  10. bzoj 1026 [SCOI2009]windy数——数位dp水题

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1026 迷恋上用dfs写数位dp了. #include<iostream> #in ...