【SSL2514】幼兒園數學題II
Description
這天,當一頭霧水的LZH同學在考場上痛哭的時候,一旁的YMW早就如切菜一樣cut掉了簡單至極的第一題,風輕雲淡的衝擊著滿分,然而最後一道題著實難道了他,畢竟是幼兒園副園長樹皮和著名毒瘤秋彪為了防止人AK而出的,可是YMW作為ACrush的著名粉絲,向來以AK為目標,永不言敗,而他能不能AK就看你了
題目是醬紫的,f(n)-f(3)-f(4)-f(5)-…-f(n-3)-f(n-2)=(n+4)(n-1)/2,f(1)=1,f(2)=1
求f(n)的前n項和
Input
輸入 一個正整數n(保證0<=n<=2^31-1)
Output
輸出 一個正整數,表示這個圖形的整點個數,需要對1000000007求餘
Sample Input
樣例輸入1
1
樣例輸出1
1
樣例輸入2
2
樣例輸出2
2
思路:
我們考慮分解式子:
我們直接從5開始分解
f(5)=f(5)
f(6)=f(3)+f(4)+25
f(7)=f(3)+f(4)+f(5)+33=f(6)+f(5)+7+1
f(8)=f(3)+f(4)+f(5)+f(6)+42=f(7)+f(6)+8+1
……
由此可得,題目就是讓你求s(n),其中f(n)=f(n-1)+f(n-2)+n+1
直接矩陣乘法
轉移矩陣請參考矩陣乘法例5
code:
#include<iostream>
#include<cstdio>
using namespace std;
long long n;
long long a[10][10];
long long ans[10][10];
long long p=1000000007;
void multi()
{
long long c[10][10];
for(long long i=1; i<=5; i++)
for(long long j=1; j<=5; j++)
c[i][j]=0;
for(long long i=1; i<=5; i++)
for(long long j=1; j<=5; j++)
for(long long k=1; k<=5; k++)
c[i][j]=(c[i][j]+ans[i][k]*a[k][j])%p;
for(long long i=1; i<=5; i++)
for(long long j=1; j<=5; j++)
ans[i][j]=c[i][j];
}
void multi1()
{
long long c[10][10];
for(long long i=1; i<=5; i++)
for(long long j=1; j<=5; j++)
c[i][j]=0;
for(long long i=1; i<=5; i++)
for(long long j=1; j<=5; j++)
for(long long k=1; k<=5; k++)
c[i][j]=(c[i][j]+a[i][k]*a[k][j])%p;
for(long long i=1; i<=5; i++)
for(long long j=1; j<=5; j++)
a[i][j]=c[i][j];
}
void ksm(long long k)
{
ans[1][1]=ans[2][2]=ans[3][3]=ans[4][4]=ans[5][5]=1;
while(k!=0)
{
if(k&1)
multi();
multi1();
k>>=1;
}
}
void multi2()
{
long long c[10][10];
for(long long i=1; i<=1; i++)
for(long long j=1; j<=5; j++)
c[i][j]=0;
for(long long i=1; i<=1; i++)
for(long long j=1; j<=5; j++)
for(long long k=1; k<=5; k++)
c[i][j]=(c[i][j]+a[i][k]*ans[k][j])%p;
for(long long i=1; i<=1; i++)
for(long long j=1; j<=5; j++)
ans[i][j]=c[i][j];
}
int main()
{
scanf("%lld", &n);
if(n==1)
{
printf("1");
return 0;
}
a[1][1]=a[2][1]=a[4][1]=a[5][1]=1;
a[1][2]=1;
a[1][3]=a[3][3]=1;
a[4][4]=a[5][4]=1;
a[5][5]=1;
ksm(n-2);
a[1][1]=a[1][2]=1;
a[1][3]=1;
a[1][4]=3;
a[1][5]=1;
multi2();
printf("%lld", (ans[1][1]+ans[1][3])%p);
return 0;
}
相關文章
- 使用Redis——拳打南山敬老院,腳踩北斗幼兒園Redis
- java map存取重複值、幼兒園分班問題、map按key自動排序問題Java排序
- 強爸帶娃記之幼兒園選擇困難症
- 幼兒園關停潮來臨,教育行業商家該如何成功“出圈”?行業
- 2021年嬰幼兒推車市場
- 全網批發馬斯克「毒雞湯」的神器,竟是幼兒園小朋友搞出來的?馬斯克
- 2019線上嬰幼兒食品行業研究行業
- 黑客練手入門| pwnable.kr—幼兒瓶—01:fd黑客
- 我國幼兒體育發展現狀及趨勢分析
- 聖地亞哥州立大學:研究發現嬰幼兒極易受到三手煙的影響
- 聯合研究發現幼兒期愛助人行為未來收入高
- [SNCPC2024] 2024 年陝西省大學生程式設計 J題猜質數II 題解程式設計
- 離散數學 II(最全面的知識點彙總)
- 454_四數相加Ii
- 艾瑞諮詢&DataStory:嬰幼兒配方奶粉增長背後的渠道推力(附下載)AST
- 中國主題公園研究院:2019中國主題公園競爭力指數報告
- leetcode:462. 最少移動次數使陣列元素相等 II(數學,中等)LeetCode陣列
- iOS數學題iOS
- 專題:數學
- 復旦大學2017--2018學年第二學期(17級)高等代數II期末考試第七大題解答
- 如何設計幼崽-草稿
- 【機器學習】梯度下降 II機器學習梯度
- 數學專題1
- AECOM:2020年主題公園和博物館指數報告
- LeetCode題解(0407):接雨水II(Python)LeetCodePython
- 【做題記錄】ds合集 Part II
- 【每日一題】 3208. 交替組 II每日一題
- 【糊題】CCPC2023桂林站 I題 Barkley II
- 264、醜數 II | 演算法(leetcode,附思維導圖 + 全部解法)300題演算法LeetCode
- LeetCode題解:264. 醜數 II,二叉堆,JavaScript,詳細註釋LeetCodeJavaScript
- 托育點,政府與社會聯合二辦理,解決雙職工家庭幼兒照顧問題, 2100元/月,餐費 45元/日;
- 數字校園系統
- 中國婦幼保健協會:2021年度兒童發展障礙康復行業藍皮書行業
- 艾瑞諮詢:2023年中國嬰幼兒輔食行業趨勢洞察報告(附下載)行業
- 部落格園主題&美化
- 部落格園主題美化
- 修改部落格園主題
- 小學數學程式設計題程式設計