1. 程式人生 > >bzoj4820 [Sdoi2017]硬幣遊戲 高斯消元+概率+kmp

bzoj4820 [Sdoi2017]硬幣遊戲 高斯消元+概率+kmp

有環的概率是可以高斯消元的

由於匹配情況可能從一個串轉移到另一個串,所以需要建一個轉移關係的圖

就可以建一個ac自動機,但節點數是nm的。就可以設未知數,然後湊一些方程。

設N表示沒有任何人獲勝的概率(允許有字首)

然後N+ A串/B串/...n串  一定會停止。

一定會停止的情況只有N  +  n種串。

若 A=HTH  B=THT

N  + HTH   =   (...A + TH )  +    (...A)   +  (...B+H)     

最後A+B=1;

然後直接解方程,注意高斯消元需要把每一項最大的放在上面,最大值形成大三角,不然會被卡精度。。

碼:

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
#define eps 0.0000000000001
int n,i,j,l,m,k,sp[505];
long double f[505][505],t,ans[505],er[505];
char ch[505][505];
void gauss()
{
	int i,j,k;
	for(i=1;i<=n;i++)//列舉方程
	{
	for(j=i;j<=n;j++)if(fabs(f[j][i])>fabs(f[i][i]))for(k=1;k<=n+1;k++)	swap(f[i][k],f[j][k]); 
	t=f[i][i];
	for(j=1;j<=n+1;j++)
		f[i][j]/=t;
	for(j=1;j<=n;j++)
	{	
	if(j==i)continue;	
	t=f[j][i];
	for(l=1;l<=n+1;l++)
	f[j][l]-=f[i][l]*t;		
	}
    }
}
int main()
{
	scanf("%d%d",&n,&m);
	er[0]=1;
	for(i=1;i<=m;i++)
	{
		er[i]=er[i-1]/2;		
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{do{
			scanf("%c",&ch[i][j]);
		}	while(ch[i][j]!='H'&&ch[i][j]!='T');
		}
	}
	for(i=1;i<=n;i++)
	{
		k=0;
		for(j=2;j<=m;j++)//適配 
		{
			while(ch[i][k+1]!=ch[i][j]&&k!=0)k=sp[k];
			if(ch[i][k+1]==ch[i][j])k++;
			sp[j]=k;
		}
		for(j=1;j<=n;j++)
		{
			l=0;
			for(k=1;k<=m;k++)
			{
				while(ch[i][l+1]!=ch[j][k]&&l!=0)l=sp[l];
				if(ch[i][l+1]==ch[j][k])l++;			
			}
			while(l)
			{
				f[i][j]+=er[m-l];
				l=sp[l];
			}
			f[i][n+1]=-er[m];
		}
	}
	for(i=1;i<=n;i++)
	f[n+1][i]=1;
	f[n+1][n+2]=1;
	n++;
	gauss();
	for(i=1;i<=n; i++)
	{
		for(j=1;j<=n;j++)
		{
			if(f[i][j]-eps>0||f[i][j]+eps<0)ans[j]=f[i][n+1];			
		}		
	}
	for(i=1;i<=n-1;i++)
	{
		printf("%.10lf\n",double(ans[i]));
	}
 } 

相關推薦

bzoj4820 [Sdoi2017]硬幣遊戲 +概率+kmp

有環的概率是可以高斯消元的由於匹配情況可能從一個串轉移到另一個串,所以需要建一個轉移關係的圖就可以建一個ac自動機,但節點數是nm的。就可以設未知數,然後湊一些方程。設N表示沒有任何人獲勝的概率(允許有字首)然後N+ A串/B串/...n串  一定會停止。一定會停止的情況只有

[JLOI2012]時間流逝 樹上 概率期望

題面 題意:(感覺題面寫的題意是錯的?)有\(n\)種能量不同的圈,設當前擁有的圈的集合為\(S\),則: 1,每天有\(p\)概率失去一個能量最小的圈。特別的,如果\(S = \varnothing\),那麼這個概率為0. 2,否則將得到一個滿足\(能量 \le S_{min}\)的圈。 求\(S\)內的

BZOJ4820 SDOI2017硬幣遊戲概率期望++kmp

  容易想到的做法是建出AC自動機,高斯消元。然而自動機上節點數量是nm的。   注意到我們要求的變數只有n個,考慮將其他不用求的節點合併為一個變數。這個變數即表示隨機生成一個串,其不包含任何一個模板串的概率。   現在即有n+1個變數,考慮列出n+1個方程。設pi表示第i個人勝利的概率,顯然有Σpi=1

【字串】【】【KMPBZOJ4820硬幣遊戲

分析: 如果資料範圍再小點,可以利用BZOJ1444有趣的遊戲方法來做。 所以這裡為了優化,直接儲存下來從某個字串轉移到另一個的概率即可。 #include<cstdio> #include

NKOJ 4087 (SDOI 2017)硬幣遊戲

P4087【SDOI2017】硬幣遊戲 問題描述 輸入格式 輸出格式 樣例輸入 3 3 THT TTH HTT 樣例輸出

bzoj1444 [Jsoi2009]有趣的遊戲(期望概率+AC自動機+

bzoj1444 [Jsoi2009]有趣的遊戲 題意: 資料範圍 n , l, m≤ 10,0<=pi<=10,1<=qi<=10 一個好想又好寫的思路是直接算T=∞時,不能出現某個序列的概率, 就是補全AC自動機

POJ 1222 更穩

ems 方程 pac wap 效果 row while 自由 方便 大致題意:   有5*6個燈,每個燈只有亮和滅兩種狀態,分別用1和0表示。按下一盞燈的按鈕,這盞燈包括它周圍的四盞燈都會改變狀態,0變成1,1變成0。現在給出5*6的矩陣代表當前狀態,求一個能全部使燈滅的

[Luogu P2973&BZOJ 1778][USACO10HOL]趕小豬DOtP(+期望)

http ios iostream 爆炸 head swa sca 選擇 main Description 一個無向圖,節點1有一個炸彈,在每個單位時間內,有可能在這個節點炸掉,也有p/q的概率隨機選擇一條出去的路到其他的節點上。問最終炸彈在每個節點上爆炸的概率。 So

UVA 1563 - SETI (+逆)

space mes line 一個 ica tom sans otto mar UVA 1563 - SETI 題目鏈接 題意:依據題目那個式子。構造一個序列,能生成對應字符串 思路:依據式子能構造出n個方程。一共解n個未知量,利用高斯消元去解,中間過程有取摸過

UVA 1397 - The Teacher&#39;s Side of Math()

continue def 而且 span build 全部 flow scanf 得到 UVA 1397 - The Teacher‘s Side of Math 題目鏈接 題意:給定一個x=a1/m+b1/n。求原方程組 思路:因為m*n最多20,全部最高項僅

2017湘潭賽 A題 Determinant (取模)

mina while 代數 tor mod continue 高斯消元 problem 元素 鏈接 http://202.197.224.59/OnlineJudge2/index.php/Problem/read/id/1260 今年湘潭的A題 題意不難 大意是把n*(n

poj 1681 Painter&#39;s Problem()

-m string.h -- 高斯 pan pro 消元 mem algorithm http://poj.org/problem?id=1681 求最少經過的步數使得輸入的矩陣全變為y。 思路:高斯消元求出自由變元。然後枚舉自由變元,求出最優值。 註意依據自由

【BZOJ2844】albus就是要第一個出場 求線性基

子集 高斯 efi continue clas sum ext ++ pre 【BZOJ2844】albus就是要第一個出場 Description 已知一個長度為n的正整數序列A(下標從1開始), 令 S = { x | 1 <= x <= n },

【BZOJ2460】[BeiJing2011]元素 貪心+求線性基

%d 很好 jin 種類 namespace 隨著 clu rip ret 【BZOJ2460】[BeiJing2011]元素 Description 相傳,在遠古時期,位於西方大陸的 Magic Land 上,人們已經掌握了用魔法礦石煉制法杖的技術。那時人們就

【BZOJ3143】[Hnoi2013]遊走 期望DP+

結束 strong 思路 add tin clu long family continue 【BZOJ3143】[Hnoi2013]遊走 Description 一個無向連通圖,頂點從1編號到N,邊從1編號到M。 小Z在該圖上進行隨機遊走,初始時小Z在1號頂點,每一

【BZOJ2322】[BeiJing2011]夢想封印 求線性基+DFS+set

思考 包含 cst 計算 next 裏的 是否 異或和 無法使用 【BZOJ2322】[BeiJing2011]夢想封印 Description 漸漸地,Magic Land上的人們對那座島嶼上的各種現象有了深入的了解。 為了分析一種奇特的稱為夢想封印(Fanta

【BZOJ3168】[Heoi2013]鈣鐵鋅硒維生素 求矩陣的逆+匈牙利算法

def strong bzoj light sof turn 防止 宇宙 != 【BZOJ3168】[Heoi2013]鈣鐵鋅硒維生素 Description 銀河隊選手名單出來了!小林,作為特聘的營養師,將負責銀河隊選手參加宇宙比賽的飲食。眾所周知,前往宇宙的某個

【BZOJ4004】[JLOI2015]裝備購買 貪心+

屬性 tchar pri getc tput += urn 又是 ron 【BZOJ4004】[JLOI2015]裝備購買 Description 臉哥最近在玩一款神奇的遊戲,這個遊戲裏有 n 件裝備,每件裝備有 m 個屬性,用向量zi(aj ,.....,am)

【bzoj3143】[Hnoi2013]遊走 期望dp+

接下來 map 頂點 log ++ double ans fabs limits 題目描述 一個無向連通圖,頂點從1編號到N,邊從1編號到M。 小Z在該圖上進行隨機遊走,初始時小Z在1號頂點,每一步小Z以相等的概率隨機選 擇當前頂點的某條邊,沿著這條邊走到下一個頂點,獲得

【BZOJ3640】JC的小蘋果 概率DP+

找到 100% strong bsp struct == 自動彈出 pre ems 【BZOJ3640】JC的小蘋果 Description 讓我們繼續JC和DZY的故事。 “你是我的小丫小蘋果,怎麽愛你都不嫌多!”