1. 程式人生 > >HDU 6172 Array Challenge【推公式/猜+矩陣快速冪】

HDU 6172 Array Challenge【推公式/猜+矩陣快速冪】

題目連結

題意:給一堆公式,求a[n]的值。

官方題解的公式推的實在是沒什麼道理,但是這個xjb亂猜我真的是一口老血噴出來。。。

f(n)=a[n],則f(n)=4f(n1)+17f(n2)12f(n3)

沒錯,就是h(n)的那個遞推……

然後就用矩陣快速冪瞎搞搞就好了,沒什麼可說的。

#include <bits/stdc++.h>
using namespace std;

typedef long long ll;
const ll mod=1000000007;

struct Matrix{
    ll a[5][5];
    void init(){
        for
(int i=1;i<=3;i++){ for (int j=1;j<=3;j++){ a[i][j]=0; } } } Matrix operator * (const Matrix &b) const{ Matrix tmp; tmp.init(); for (int i=1;i<=3;i++){ for (int j=1;j<=3;j++){ for
(int k=1;k<=3;k++){ tmp.a[i][j]+=(a[i][k]*b.a[k][j]%mod+mod)%mod; } } } return tmp; } }; Matrix mat_pow(Matrix mat,ll n){ Matrix ans; ans.init(); ans.a[1][1]=ans.a[2][2]=ans.a[3][3]=1; while (n){ if (n&1
) ans=mat*ans; mat=mat*mat; n>>=1; } return ans; } int main(){ int T; scanf("%d",&T); while (T--){ ll n; scanf("%lld",&n); if (n==2) printf("31\n"); else if (n==3) printf("197\n"); else if (n==4) printf("1255\n"); else{ Matrix mat; mat.init(); mat.a[1][1]=4,mat.a[1][2]=17,mat.a[1][3]=-12; mat.a[2][1]=1,mat.a[3][2]=1; mat=mat_pow(mat,n-4); ll ans=((mat.a[1][1]*1255%mod+mat.a[1][2]*197%mod+mod)%mod+31*mat.a[1][3]%mod+mod)%mod; ans%=mod; printf("%lld\n",ans); } } }

相關推薦

HDU 6172 Array Challenge公式/+矩陣快速

題目連結 題意:給一堆公式,求⌊a[n]‾‾‾‾√⌋的值。 官方題解的公式推的實在是沒什麼道理,但是這個xjb亂猜我真的是一口老血噴出來。。。 令f(n)=⌊a[n]‾‾‾‾√⌋,則f(n)=4f

HDU 6172 Array Challenge (打表找規律+矩陣快速 17多校第十場第2題)

題目連結 題意 分析 不得不佩服AC這道題的人腦洞,為什麼你們這麼熟練。。。打表找規律無所不能。 因為我們無法處理開方的取模問題,因此我們不能一步步求。我們令fn=⌊an−−√⌋,則打表

2017多校第10場 HDU 6172 Array Challenge 公式矩陣

set its typedef == name main d+ space img 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=6172 題意:如題。 解法: #include <bits/stdc++.h&g

HDU - 6172:Array Challenge (BM線性遞)

oid bit pan gin https challenge pre linear res 題意:給出,三個函數,h,b,a,然後T次詢問,每次給出n,求sqrt(an); 思路:不會推,但是感覺a應該是線性的,這個時候我們就可以用BM線性遞推,自己求出前幾項,然後

第十場 hdu 6172 Array Challenge矩陣快速

不知道 log tar 4.6 width += arr open ret http://acm.hdu.edu.cn/showproblem.php?pid=6172 題目大意:按照給出的公式算出an 解題思路:an=4an-1+17an-2-12an-3,不要問

HDU 6172 Array Challenge 找規律+矩陣快速

題目 分析       這道題目一看就想到矩陣快速冪。可以先把hn算出來,進而把bn,an都算出來。但是發現一個問題,題目中是要求⌊an−−√⌋對1e9+7取模之後的值。但是開根號沒法取模啊,所

2017 ACM/ICPC Asia Regional Shenyang Online:number number number hdu 6198矩陣快速

cpc 相同 exp -128 integer regional test atom online Problem Description We define a sequence F:? F0=0,F1=1;? Fn=Fn?1+Fn?2 (n≥2).Give you

矩陣快速HDU - 5950 C - Recursive sequence

C - Recursive sequence HDU - 5950 Farmer John likes to play mathematics games with his N cows. Recently, they are attracted by recursive sequences.

AC自動機+矩陣快速POJ - 2778 - DNA Sequence & HDU - 2243 - 考研路茫茫——單詞情結

POJ - 2778 - DNA Sequence 題目連結<http://poj.org/problem?id=2778> 題意: DNA序列只包含ACTG四個字元,已知一些病毒的DNA序列,問你序列長度為n(1 <= n <=2000000000)且不

HDU 6198 number number number找規律+矩陣快速

題目連結 題意:從含0的斐波那契數列中可重複的任取K個數,求這K個數的和無法形成的最小整數。 寫了幾個之後大膽的猜測i的答案是F[2∗(i+1)+1]−1… 於是矩陣快速冪…… #includ

矩陣快速HDU 4549 : M斐波那契數列(矩陣巢狀)

【題目大意】 M斐波那契數列F[n]是一種整數數列,它的定義如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 現在給出a,

+矩陣快速HDU2604Queuing

Queuing Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3032    Accepted Subm

hdu-4549 M斐波那契數列矩陣快速

找規律寫出f(2),f(3),f(4),f(5) .........可以發先 a b的係數是一系列的fib數列   如果可以求出fib數列 求快速冪就可以了    這樣問題就在於如何求fib數列了                           1     1 【f[n

hdu 5667 Sequence矩陣快速

Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 285    Accepted Submis

HDU 6395 Sequence 矩陣快速分割槽

Sequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 1900    Accepted Subm

HDU --- 4549 M斐波那契數列 費馬小定理+矩陣快速

傳送門 思路: 通過把前面幾項手推出來可以發現, 其次方項符合斐波那契數列, 又因為資料非常大, 所以就可以想到用矩陣快速冪去求得次方項, 需要注意的就是我們求的是次方, 而答案是取的某個數的該次方, 而a^b % p != a^(b%p) % p, 所以就

hdu 5950 2016ACM/ICPC瀋陽賽區現場賽C題矩陣快速

Problem Description Farmer John likes to play mathematics games with his N cows. Recently, they are attracted by recursive seque

HDU 6198number number number 規律+矩陣快速

We define a sequence F: ⋅ F0=0,F1=1; ⋅ Fn=Fn−1+Fn−2 (n≥2). Give you an integer k, if a positive number n can be expressed by n=

BZOJ4818 [SDOI2017] 序列計數 矩陣快速

void 所有 num ret con esp span 相同 std 題目分析: 一個很顯然的同類項合並。註意到p的大小最大為100,考慮把模p意義下相同的求出來最後所有的減去沒有質數的做矩陣快速冪即可。 代碼: 1 #include<bits/stdc++.h

HDU1575-Tr 矩陣快速(模板題)

target bsp .net code test tdi init ace contest <題目鏈接> A為一個方陣,則Tr A表示A的跡(就是主對角線上各項的和),現要求Tr(A^k)%9973。 Input 數據的第一行是一個T,表示有T組數據。