首页 > 其他分享 >【题解】臭气弹

【题解】臭气弹

时间:2023-04-07 21:12:20浏览次数:39  
标签:cnt int 题解 void d% maxx 臭气 double

image


用次数乘上 \(P/Q\) 来构建增广矩阵,进行高斯消元。在算出每个点被摧毁的概率与所有点的期望出现次数。

由于每个点爆炸概率相同,所以每个点被摧毁的概率就是这个点的期望出现次数 \(/\) 所有点的期望出现次数


#include<bits/stdc++.h>
using namespace std;
const int N=311;
const double esp=1e-8;
int n,m,p,q;
double sum,c[N][N],d[N],a[N][N],b[N],o[N];
//int h[N],cnt;
//struct node{int to,next,y;}e[N];
//inline void add(int x,int y){
//	e[++cnt].to=y;e[cnt].next=h[x];
//	h[x]=cnt;
//}
inline void zzd(int &maxx,int i){
	for(int j=i+1;j<=n;++j){//找系数最大值 
		if(fabs(c[j][i])>fabs(c[maxx][i]))
			maxx=j;
	}
	return ;
}
signed main(void){
	scanf("%d%d%d%d",&n,&m,&p,&q);
	double tt=1.0-(1.0*p/q);
	for(int x,y,i=1;i<=m;++i){
		scanf("%d%d",&x,&y);
//		add(x,y);add(y,x);
		c[x][y]=c[y][x]=1;
		++d[x],++d[y];
	}
	for(int i=1;i<=n;++i){
		a[i][i]=1.0;
		for(int j=1;j<=n;++j){
			if(c[i][j]){
				a[i][j]-=1.0*tt/d[j];//概率 
				//if(j!=t) a[j][i]-=1.0*tt/d[j+t];
			}
		}
	}
	b[1]=1.0;
	for(int maxx,i=1;i<=n;++i){
		maxx=i;
		zzd(maxx,i);
		for(int j=1;j<=n;++j) swap(a[i][j],a[maxx][j]);
		swap(b[i],b[maxx]);
		for(int j=1;j<=n;++j){
			if(j!=i){
				tt=a[j][i]/a[i][i];
				for(int k=i;k<=n;++k)
					a[j][k]-=a[i][k]*tt;
				b[j]-=b[i]*tt;
			}
		}
	}
	for(int i=1;i<=n;++i){
		o[i]+=b[i]/a[i][i];
		sum+=o[i];
	}
	for(int i=1;i<=n;++i)
		printf("%.9lf\n",o[i]/sum);//每个概率/总概率 
	return 0;
}

标签:cnt,int,题解,void,d%,maxx,臭气,double
From: https://www.cnblogs.com/GOD-HJ/p/17297334.html

相关文章

  • 荣耀magicbook安装Linux系统boot fail问题解决
    偶然网上冲浪,发现了Debian系的kalilinux有点意思,刚好手边有一台不怎么用的荣耀magicbook,于是准备装个双系统好不容易下完了kali的镜像,使rufus写入了U盘但是在安装过程中怎么安装都显示bootfail,切换了n个版本的Linux系统,发现还是这样,但是实测Debian11是可以进入引导项的最后所......
  • CF1810E 题解
    一、题目描述:给你一个n个点,m条边的无向图,点带权,起点可任意选择。每走过一个新的点,你的能力值会+1。一开始你的能力值为0。你只能经过点权小于等于你能力值的点。每条边,每个点都可以经过无限次,问能否走遍整个图。如果可以,输出"YES"。否则输出"NO"。......
  • 洛谷P1552 [APIO2012] 派遣 题解 左偏树
    题目链接:https://www.luogu.com.cn/problem/P1552题目大意:每次求子树中薪水和不超过\(M\)的最大节点数。解题思路:使用左偏树维护一个大根堆。首先定义一个Node的结构体:structNode{ints[2],c,sz,dis;longlongsum;Node(){};Node(int_c){s......
  • 关于Qt在线安装报错的一些问题解决办法
    事情的起因是,换了一台新电脑,准备安装Qt,突发现安装不了,报错,一共有几种:1.   2.第二种是不能到选择安装的界面   3.第三种是可以选择了,也可以下载安装了,但是卡在一个地方不动了以上3种个人猜测可能是某些网络原因,至于是什么网络原因,大家自行脑补。不多说废话,经过我......
  • 【容斥、状压dp】主旋律 题解
    【清华集训2014】主旋律题解神秘题。题目简述给你一个有向图\(G=(V,E)\)。求有多少\(E\)的子集\(E'\)使得新图\(G'=(V,E')\)是强连通图。强连通图的定义是任意两点\(u,v\)均存在\(u\tov,v\tou\)的路径。\(n\leq15,m\leqn\times(n-1)\)。解题思路......
  • GMOI R2 T2 猫耳小(加强版) 官方题解
    首先特判\(k=0\)的情况,此时的答案为非\(0\)数的个数,改法是将它们全改成\(0\)。再特判\(k\)较大的情况,此时的答案为\(0\)。否则,对于\(k\)大小适中的情况,我们从前往后遍历数组,同时维护当前区间的\(\operatorname{mex}\)值。根据\(\operatorname{mex}\)的定义,显然对......
  • [HAOI2007]理想的正方形【题解】
    题目描述有一个\(a\timesb\)的整数组成的矩阵,现请你从中找出一个\(n\timesn\)的正方形区域,使得该区域所有数中的最大值和最小值的差最小。输入格式第一行为\(3\)个整数,分别表示\(a,b,n\)的值。第二行至第\(a+1\)行每行为\(b\)个非负整数,表示矩阵中相应位置上......
  • 奶牛排队【题解】
    题目描述奶牛在熊大妈的带领下排成了一条直队。显然,不同的奶牛身高不一定相同……现在,奶牛们想知道,如果找出一些连续的奶牛,要求最左边的奶牛\(A\)是最矮的,最右边的\(B\)是最高的,且\(B\)高于\(A\)奶牛。中间如果存在奶牛,则身高不能和\(A,B\)奶牛相同。问这样的奶牛最......
  • AT CODE FESTIVAL 2016 Final J 题解
    题目妙妙题!简要题意:给定一个\(n\),有一个\(n\timesn\)的网格图。有\(4n\)个方向\(U/D/L/R_{1,2,\dots,n}\),如下图:对于每个方向,有个限制:数\(x\)。你可以进行\(\lex\)次推棋子,把一个棋子放到当前方向指向的第一格,然后如果原来第一格有棋子,把它放到第二格,如果原来第二......
  • 【问题解决】eclipse cdt debug状态控制台输出中文部分乱码
    问题复现使用eclipsecdt版本写了一个C代码简易输出的程序如下:#include<stdio.h>#include<stdlib.h>voidprintln(chararr[]){ inti=0; while(arr[i]!='\0'){ printf("%c",arr[i]); i++; } printf("\n");}intmain(void){......