洛咕神題,幸好我不是sd的qaq。
假設你們都會\(o(n^3m^3)\)的高斯消元,具體來說就是建出\(trie\)圖然後套遊走的板子。
然後我們發現可以把不能匹配任何串的概率壓到一起。
考慮乙個不能匹配任何串的\(s\)。乙個串\(a_i\)獲勝當且僅當最後串是這樣的:\(s+a_i\)。
真的嗎?
如果\(s\)的字尾和\(a_i\)的字首能拼出來\(a_j\)就假掉了。所以神仙們採用了神仙做法。
引用\(kelin\)神犇的例子。
舉個例子設\(a=101,b=110\)。
\(s101=(s+a),(s'+a+01),(s''+b+1)\),其中\(s'+10=s,s''+1=s\)。
上面三種組成方式概率為\(2\)的他們後面串的長度次方,分別是\(1,\frac,\frac\)。
於是乙個上好的方程就列出來了。
\[\fracp_s=(1+\frac)p_a+\fracp_b$$。
由於~~這種辣雞題目你直接消肯定是錯的的定律~~這些方程一定有$n$個可以線性張成另乙個,所以我們還要加上$\sum\limits_^np_i=1$。
畢竟我們什麼都不加的化每個$p_i$擴大相同倍數也是對的qaq。
就醬。```
#include#include#include#define gt getchar()
#define ll long long
#define file(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
inline int in()
const int n=305,m=1e5+5;
const double eps=1e-10,p=0.5;
int n,m,cnt,ch[m][2],head[m],to[m],nxt[m];
int pos[n],fa[m],sz[m],tot;
double p[n],g[n][n];
char s[n];
inline void add(int u,int v)
#define v (ch[u][i])
inline void insert(int p)
inline void build()
#undef v
inline void calc(int x)
int o[n];
inline void gauss(int n)
o[pos[i]]=1;double t=g[pos[i]][i];
for(int j=1;j<=n+1;++j)g[pos[i]][j]/=t;
for(int k=1;k<=n;++k)
if(pos[i]!=k)
}}int main()
```\]
SDOI2017 硬幣遊戲
考慮生成函式來做 g x 函式就是0 0 x 1 x s n s x n 就是最後s位必須填這個串,但是前面隨便填的方案數 然後列舉之前出現了哪個串 包括自己 如果沒有相交,就是fj x g x 還有就是有前字尾有相交部分,pji x 中的第k位,表示i的長度為m k的字首和j的長度為m k的字尾是...
SDOI2017 硬幣遊戲 Hash 高斯消元
description 給你乙個字串集,構造乙個串每個位置等概率的插入。問字串集中每個字串最先出現在構造的串中的概率。sample input 3 3tht tthhtt sample output 0.3333333333 0.2500000000 0.4166666667 首先這道題有弱化版,就...
SDOI2017 切樹遊戲
題目 二輪毒瘤題啊 辣雞洛谷竟然有卡樹剖的資料 還是 loj 可愛 首先這道題沒有帶修,設 dp 表示以 i 為最高點的連通塊有多少個異或和為 j g sum dp k in tree i 表示 k 在 i 子樹內部 我們可以直接把每乙個權值 fwt 一下,大力合併就好了,合併直接對位相乘,只需要在...