題目大意:有一張n個點的有向圖,每條邊有個字元,一開始在1,每次隨機一條出邊走過去,這樣經過的邊上的字元會形成乙個字串。給你兩個串s和t,問形成的字串第一次包含s為子串或者包含t為子串行時,期望走了幾次或者判斷答案趨於無窮。n≤20
,∣s∣
≤10,∣
t∣≤50
n\le20,|s|\le10,|t|\le50
n≤20,∣
s∣≤1
0,∣t
∣≤50
題解:顯然可以高消。注意到這個轉移的圖是個∣t∣
+1
|t|+1
∣t∣+
1層的,因此每層內高消即可。
判定無解可以先看從初始狀態出發到達的狀態是否全都能到達某個終點狀態,然後只對這些做高消即可。然後消的時候判0即可。
#include
#define rep(i,a,b) for(int i=a;i<=b;i++)
#define rep(i,v) rep(i,0,(int)v.size()-1)
#define lint long long
#define ull unsigned lint
#define db long double
#define pb push_back
#define mp make_pair
#define fir first
#define sec second
#define gc getchar()
#define debug(x) cerr<<#x<<"="<#define sp <<" "
#define ln typedef pair<
int,
int> pii;
typedef set<
int>
::iterator sit;
inline
intinn()
inline
intinch()
const
int n=
230,sig=
26,ls=
15,lt=
55,pt=25;
const db eps=
1e-8
;inline db gabs
(db x)
struct gs
inline db&
operator()
(int x,
int y)
inline db&
operator()
(int x)
inline
intsolve()
}return1;
}inline
intshow()
return cerr ln,0;
}}gs;
int g[pt]
[sig]
,id[lt]
[pt]
[ls]
,cnt[lt]
,trs[ls]
[sig]
,d[pt]
;char s[ls]
,t[lt]
;db f[lt]
[n];
inline
int_is_same
(char
*s,char
*t,int n)
inline
intget_trs
(char
*s,int n)
namespace wj
inline
intdfs
(int x,vector<
int>
*f)inline
intno_ans
(int n,
int m,
int p)
}int
main()
}if(!gs.
solve()
)return
!printf
("-1\n");
rep(j,
1,cnt[i]
) f[i]
[j]=
gs(j);}
return
!printf
("%.6lf\n",(
double
)f[0
][id[0]
[1][
0]])
;}
高斯消元 浮點高斯消元
浮點數高斯消元 問題描述 給出乙個線性方程組,有n個方程組,m個未知數。解這個線性方程組。輸入格式 第1行 2個整數n和m,n,m 400,且n不一定等於m 接下來n行,每行m 1個整數,表示乙個方程的m個未知數的係數和常數 輸出格式 如果無解,輸出 no solution 如果有唯一解,輸出m行,...
矩陣消元 高斯消元
安利一波高斯消元的部落格,內容很詳細。看完這個相信你已經理解了大概,高斯消元求線性方程組,在學習線性代數 大學課程 的時候我們都接觸過。原理是先把執行緒組轉換成矩陣,然後把它等價變換成上三角矩陣,這樣從下到上依次可以求出解集。高斯消元模板 模板題 include define n 205 using...
矩陣乘 高斯消元專題小結 高斯消元
i p其它題太水了就不寫了,這裡說一下o和p。我太懶不想寫 op這兩個題是高斯消元求期望的題。對於p題,求從 點到 點的步數期望,先從 點bfs一遍找到所有可以到達的點,對於可達點每個點是乙個變數。因為終點有任意多而起點只有乙個,這裡可以反過來求從任意乙個終點走到起點的期望。於是對於每乙個終點的期望...