hdu2604矩阵快速幂
来源:互联网 发布:英雄联盟 魔兽世界知乎 编辑:程序博客网 时间:2024/05/22 14:59
import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.io.StreamTokenizer;import java.math.BigInteger;import java.util.ArrayList;import java.util.Arrays;import java.util.Comparator;import java.util.LinkedList;import java.util.PriorityQueue;import java.util.Queue;import java.util.Scanner;import java.util.Stack;import java.util.StringTokenizer;public class Main { public static void main(String[] args) throws IOException{ StreamTokenizer cin = new StreamTokenizer(new BufferedInputStream(System.in)); InputReader in = new InputReader(System.in) ; PrintWriter out = new PrintWriter(System.out) ; while(cin.nextToken() != cin.TT_EOF){ int n = (int)cin.nval ; cin.nextToken() ; int mod = (int) cin.nval ; out.println( new Task().solve(n , mod) ) ; out.flush() ; } out.flush() ; }}class Task{ public long solve(int n , int mod){ if(n == 1) return 2 % mod ; if(n == 2) return 4 % mod ; if(n == 3) return 6 % mod ; if(n == 4) return 9 % mod ; Mat A = new Mat(new int[][]{{1,0,1,1} ,{1,0,0,0} ,{0,1,0,0} ,{0,0,1,0}} ) ; A = A.Pow(n-4, mod) ; long ans = 0 ; ans = (ans + A.a[0][0] * 9) % mod ; ans = (ans + A.a[0][1] * 6) % mod ; ans = (ans + A.a[0][2] * 4) % mod ; ans = (ans + A.a[0][3] * 2) % mod ; return ans ; } }class Mat{ int [][]a ; public Mat(int[][] c){ a = new int[4][4] ; for(int i = 0 ; i < 4 ; i++) for(int j = 0 ; j < 4 ; j++) a[i][j] = c[i][j] ; } public Mat(){ a = new int[4][4] ; for(int i = 0 ; i < 4 ; i++) Arrays.fill(a[i], 0) ; } public Mat(int one){ a = new int[4][4] ; for(int i = 0 ; i < 4 ; i++){ Arrays.fill(a[i], 0) ; a[i][i] = 1 ; } } Mat mult(Mat other , int mod){ Mat s = new Mat() ; for(int i = 0 ; i < 4 ; i++){ for(int j = 0 ; j < 4 ; j++){ for(int k = 0 ; k < 4 ; k++){ s.a[i][j] += a[i][k] * other.a[k][j] ; if(s.a[i][j] >= mod) s.a[i][j] %= mod ; } } } return s ; } Mat Pow(int y , int mod){ Mat s = new Mat(1) ; Mat x = this ; for(; y > 0 ; y >>= 1){ if((y & 1) == 1) s = s.mult(x, mod) ; x = x.mult(x, mod) ; } return s ; }}class InputReader{ public BufferedReader reader; public StringTokenizer tokenizer; public InputReader(InputStream stream){ reader = new BufferedReader(new InputStreamReader(stream), 32768); tokenizer = null; } public String next(){ while(tokenizer == null || !tokenizer.hasMoreTokens()){ try{ tokenizer = new StringTokenizer(reader.readLine()); }catch (IOException e) { throw new RuntimeException(e); } } return tokenizer.nextToken(); } public int nextInt() { return Integer.parseInt(next()); } public long nextLong() { return Long.parseLong(next()); }}
0 0
- hdu2604 矩阵快速幂
- 快速矩阵幂HDU2604
- hdu2604矩阵快速幂
- HDU2604【矩阵快速幂】
- hdu2604之矩阵快速幂
- hdu2604(矩阵快速幂)
- HDU2604 Queuing(矩阵快速幂)
- [矩阵快速幂]hdu2604 Queuing
- hdu2604(递推,矩阵快速幂)
- HDU2604-Queuing(递推+矩阵快速幂)
- hdu2604 Queuing(矩阵快速幂 + DP)
- HDU2604-- Queuing(矩阵快速幂优化)
- 【递推+矩阵快速幂】【HDU2604】【Queuing】
- hdu2604 递推转换矩阵快速幂
- HDU2604 Queuing(矩阵快速幂模板)
- [HDU2604]Queuing(dp+矩阵快速幂)
- HDU2604 递推关系+矩阵快速幂
- hdu2604 Queuing (矩阵快速幂+动态规划)
- fancy2D 源码解析 1 TestCpp
- Web应用启动时,后台自动启动一个线程
- Lowest Common Ancestor of a Binary Tree leetcode236
- 分享功能 集成友盟分享
- 学习记录——递归和堆栈
- hdu2604矩阵快速幂
- sublimetext mac常用快捷键
- java中Date的getTime()函数
- OC 基础之----属性
- websphere MQ 编程指南(Java)
- LightOJ 1070 Algebraic Problem (推导+矩阵快速幂)
- java io
- NSObject
- IOS开发中,SVN如何恢复到某一个版本(以Cornerstone为例)