題意是給定一副無向圖,然後求走了t步之內,從起點到終點有多少走法,(有個地方題面沒有說清楚,就是走到點n之後不能再往別的點走了)
鄰接矩陣,乘t次之後,map[i][j]就是從i點走到j點的且走t步時的走法。
我們把矩陣中n到其他點的路徑去掉,
所以我們要算的就是∑ (map[1][n] )^i (1 <= i <= t)就是答案了 。於是我們要構造乙個矩陣把字首和記錄一下。
由於在原來的鄰接矩陣中,我們只關心的只有map[1][n]這個值,我們可以把原矩陣放入乙個新的矩陣中,或者說把矩陣拓展一維,令map[0][n] = 1,然後把這樣,map[1][0]記錄的就是上乙個狀態的map[1][n],由於是要求字首和,我們要把他再加起來,所以map[0][0]處再新增乙個1進去,這樣就可以把上個狀態一起加進去,遞推之後map[1][0]就是不包括當前狀態字首和,最後答案就是map[1][n] + map[1][0] ;
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define long long long
const
int inf=0x3f3f3f3f;
const long mod=1e9+7;
const
double pi=acos(-1.0);
#define clr0(x) memset(x,0,sizeof x)
#define clri(x) memset(x,-1,sizeof(x))
#define clr1(x) memset(x,inf,sizeof x)
#define clr2(x) memset(x,-inf,sizeof x)
#define eps 1e-10
int n ;
struct matr
matr ( long x,int y)
};matr operator * (matr &a , matr &b)
return ans ;
}matr equ(matr &a , matr &b)
matr q_pow_m( matr &a , long b)
return res ;
}int main()
int t ;
cin>> t ;
matr tmp(0);
matr ans(0);
ans = q_pow_m( take , t ) ;
cout
<<( ans.matr[1][n] + ans.matr[1][0] ) % mod<0;
}}
2017川大校賽A題
題意就不說了,我們也錯了那麼多次,這個題有兩個問,其實比較難的是第乙個問,但是剛好第乙個問我在上一周曾經問過龍哥,那麼第乙個問就秒出答案,對於第乙個問的精度問題,當暴力算時n是小於10的,答案要求保留前6位小數,沒問題。然後第二個問就是乙個比較簡單的概率dp。題目求抽m次剛好抽到n張卡的概率,那麼對...
山科大校賽C題
時間限制 1 sec 記憶體限制 128 m 瑞神要準備考研了,為了複習資料結構,瑞神在某寶上買了一本資料結構得考研輔導資料 考研資料結構 從入門到放棄 從此瑞神開始了愉快的復 zhuang 習 bi 有一天,瑞神找了好多條鍊錶來輔助自己複習,但是他在複習的過程中一不小心把鍊錶掉在了地上,撿起來的時...
湖科大校賽第三題
小兔位於x軸的x點,欲跳至x軸的y點。x,y均為整數。小兔每次沿x軸直線跳躍,每跳的長度均為正整數,假設 小兔一共跳了n次才到目的地,每次跳的長度為f1,f2,fn.有規則如下 f1 fn 1 fi fi 1 1 2 i n 注 是絕對值符號 我們的問題是給定x,y,如何使得n最小。包含多組資料,但...