題目描述:
在長沙城新建的環城公路上一共有8個公交站,分別為a、b、c、d、e、f、g、h。公共汽車只能夠在相鄰的兩個公交站之間執行,因此你從某乙個公交站到另外乙個公交站往往要換幾次車,例如從公交站a到公交站d,你就至少需要換3次車。
tiger的方向感極其糟糕,我們知道從公交站a到公交e只需要換4次車就可以到達,可是tiger卻總共換了n次車,注意tiger一旦到達公交站e,他不會愚蠢到再去換車。現在希望你計算一下tiger有多少種可能的乘車方案。
輸入格式:
輸入檔案由bus.in讀入,輸入檔案當中僅有乙個正整數n(4<=n<=10000000),表示tiger從公交車站a到公交車站e共換了n次車。
輸出格式:
輸出到檔案bus.out。輸出檔案僅有乙個正整數,由於方案數很大,請輸出方案數除以 1000後的餘數。
輸入樣例#1:
6輸出樣例#1:
8解題思路:
一開始我沒感覺跟矩陣有什麼聯絡,
以前做的都是不需要轉換一下的裸題,
後來發現其實有點floyd的思想。
做矩陣乘法的時候:
w[i][j]=(w[i][j]+(q[i][k]*e[k][j])%mod)%mod)),
可以理解為從i走到j的方案數,
每次列舉1-n為中間點,
用乘法原理去更新w[i][j]的方案數,
這樣一看就跟矩陣快速冪有聯絡了。
還有乙個細節問題,就是不能從i 走到 5 再走到 j,
因為他走到5就不會離開了。
所以**如下:
#include#include#include
#define ll long long int
using
namespace
std;
struct
mata,b;
ll n,mod=1000
;mat mul(mat q,mat e)
void
pow(mat c,ll p)
p>>=1
; c=mul(c,c);
} }int
main()
a.t[
8][9]=0;a.t[9][8]=0
; a.t[
1][8]=1;a.t[8][1]=1
; pow(a,n);
printf(
"%lld
",b.t[1][5]%mod);
}
洛谷 2233 HNOI2002 公交車路線
題目戳這裡 一句話題意 乙個大小為8的環,求從1到5正好n步的方案數 途中不能經過5 solution 鉅說這個題目很水 應該是比較容易的dp,直接從把左邊和右邊的方案數加起來即可,但是有幾個需要注意的地方 1.因為n有1e7所以需要滾動陣列。2.因為不能經過5,所以4只能從3轉移,6只能從7轉移。...
洛谷 P2233 HNOI 公交車線路
洛谷 不知道大家做沒做過傳球遊戲,這一題和傳球遊戲的轉移方程幾乎一樣。令 a 為 1 點,e 為 5 點,那麼 f i j 代表第i步走到j的方案數。f i j f i 1 j 1 f i 1 j 1 因為題中給的是乙個環,所以有幾種情況。if j 8 f i j f i 1 1 f i 1 7 i...
公交車路線查詢系統後台資料庫設計 查詢演算法
1.公交車路線資訊在資料庫中的儲存方式 顯然,如果在資料庫中簡單的使用表bus route 路線名 路線經過的站點,費用 來儲存公交車路線的線路資訊,則很難使用查詢語句實現乘車線路查詢,因此,應該對線路的資訊進行處理後再儲存到資料庫中,筆者使用的方法是用站點 路線關係表stop route 站點 路...