首页 > 其他分享 >题解 CF1842H【Tenzing and Random Real Numbers】

题解 CF1842H【Tenzing and Random Real Numbers】

时间:2023-07-16 18:44:18浏览次数:44  
标签:Real le Tenzing int 题解 LL return include

看了题解。好难受,想用积分求概率,算了半天。发现没啥规律,不是不能算,就是太可怕了。

Problem

有 \(n\) 个 \([0,1]\) 范围内的均匀随机变量 \(x_{1\cdots n}\) 和 \(m\) 条限制,每条限制形如 \(x_i+x_j\le 1\) 或 \(x_i+x_j\ge 1\)。请你求出所有限制均满足的概率。对 \(998244353\) 取模。

\(1\le n\le 20,\ 0\le m\le n^2+n\)。

Solution

设 \(y_i=x_i-\frac{1}{2}\)。这样的好处是,消去常数,我们有如下的性质:

  • 若 \(x_i+x_j<1\Rightarrow y_i+y_j<0\),那么它们同为负或者负数的绝对值大于正数。不妨 \(|y_i|<|y_j|\),那么就是 \(y_j<0\)。
  • 将小于换成大于也一样。

这启发我们按照 \(|y_i|\) 大小考虑。考虑一个集合 \(S\),现在加入 \(y_i\),那么发现 \(y_i\) 能不能加入,符号是正是负,只和它自己有关。那么状压 DP 就是了。

话说这里有个小细节:\(y_i\) 比 \(y_1,y_2,\cdots,y_{i-1}\) 都大的概率是 \(\frac{1}{i}\)。可以考虑算方案数,最后除以总方案数的时候会发现有个阶乘,那么把这个阶乘分发到每个加入的地方即可。或者好像有神秘微积分证明。

Code

点击查看代码
// LUOGU_RID: 115883767

#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
#ifdef LOCAL
#define debug(...) fprintf(stderr,##__VA_ARGS__)
#else
#define debug(...) void(0)
#endif
typedef long long LL;
const int P=998244353;
LL red(LL&x){x%=P;}
LL mod(LL x){return (x%P+P)%P;}
int getbit(int k){return 1<<k;}
bool conbit(int x,int k){return x&getbit(k);}
int n,m;
LL qpow(LL a,LL b,int p=P){LL r=1;for(;b;b>>=1,a=a*a%p) if(b&1) r=r*a%p; return r;}
LL inv[30],f[1<<20],Ele[30],Ege[30];
int main(){
//	#ifdef LOCAL
//	 	freopen("input.in","r",stdin);
//	#endif
	for(int i=1;i<=25;i++) inv[i]=qpow(i,P-2,P);
	scanf("%d%d",&n,&m);
	for(int i=1,t,u,v;i<=m;i++){
		scanf("%d%d%d",&t,&u,&v),u--,v--;
		if(!t) Ele[u]|=1<<v,Ele[v]|=1<<u;
		else Ege[u]|=1<<v,Ege[v]|=1<<u;
	}
	f[0]=1;
	for(int S=0;S<1<<n;S++){
		for(int i=0;i<n;i++){
			if(conbit(S,i)) continue;
			if((Ege[i]&(S|1<<i))==0) red(f[S|1<<i]+=f[S]);
			if((Ele[i]&(S|1<<i))==0) red(f[S|1<<i]+=f[S]);
		}
	}
	LL ans=f[(1<<n)-1];
	for(int i=1;i<=n;i++) red(ans*=inv[i]*inv[2]%P);
	printf("%lld\n",ans);
	return 0;
}

标签:Real,le,Tenzing,int,题解,LL,return,include
From: https://www.cnblogs.com/caijianhong/p/solution-CF1842H.html

相关文章

  • Noip优质模拟赛口胡题解
    HDU5719题意概括:第一行输入t表示输入数据,每组数据第一行n,表示对1—n进行排序。接下来输入n个数b[n]表示排列中第i个数之前的最小值为b[i]。第三行n个数c[n],表示排列中第i个数之前的最大值为c[i]。解题思路:递推,排除掉6种不可能的情况,1、b[i]>b[i-1]2、c[i]<c[i-1]3、b[i]......
  • 2023.07.16 高质量 NOIP 模拟赛题解
    HDU5719Arrange【模拟】给定数列\(B_n,C_n\),求出满足\[B_i=\min_{j=1}^i\{A_j\},\quadC_i=\max_{j=1}^i\{A_j\}\]的排列\(A\)的数量。维护每个位置可能的数字数量,然后乘法原理即可。代码:http://acm.hdu.edu.cn/viewcode.php?rid=38654445。HDU5807KeepInTouch......
  • HHHOJ #1247. 「NOIP 2023 模拟赛 20230715 A」1 题解--zhengjun
    法老找来的题,说是找了三道其他模拟赛的T4拼成T1~T3,另外搞了道T4。思维好题,但是放在T1有点搞心态,但是还好大样例够强,400没挂。然而T3大样例输出错了,浪费了我0.5h,差评。首先发现向左走之后向右走是一定不优的,所以最短路的情况只能先向右再向左。考虑枚举起点\(s......
  • 题解 P2839【[国家集训队] middle】
    Problem一个长度为\(n\)的序列\(a\),设其排过序之后为\(b\),其中位数定义为\(b_{n/2}\),其中\(a,b\)从\(0\)开始标号,除法下取整。给你一个长度为\(n\)的序列\(s\)。回答\(Q\)个这样的询问:\(s\)的左端点在\([a,b]\)之间,右端点在\([c,d]\)之间的子区间中,最大的中......
  • 你省(福建)省队集训 Day5 T1 题解
    简要题意有两个正整数\(a<b\le10^9\),给出\(\dfrac{a}{b}\)的小数点后\(19\)位,要求还原\(a,b\),保证有解。solution一个科技:\(\texttt{Stern-Brocottree}(SBT)\),可以参考这个博客学习。先给出\(O(n)\)找的代码:......
  • 云斗杯 T2 派蒙是最好的伙伴! 题解
    云斗杯T2题解赛时脑抽了只打了60pts暴力xwx。题目描述给定两个长度为\(n\)的\(01\)序列\({a_n}\)和\({b_n}\),与另一个矩阵\({c_{n,n}}\)。矩阵\({c_{n,n}}\)的生成规则如下:\[c_{i,j}=a_i\timesb_j\]现给定一个数\(k\),求在矩阵\(c_{n,n}\)内,有多少个......
  • freee Programming Contest 2023(AtCoder Beginner Contest 310)题解
    点我看题A-OrderSomethingElse直接比较\(P\)和\(Q+min(D_i)\),输出较小值即可。点击查看代码#include<bits/stdc++.h>#definerep(i,n)for(inti=0;i<n;++i)#definerepn(i,n)for(inti=1;i<=n;++i)#defineLLlonglong#definefifirst#definesesecond#defi......
  • AJAX请求,响应头有set-cookie但浏览器不能写入cookie问题解决!
    开幕雷击:AJAX就不是干这个ajax只有向服务器发送请求时带上cookie的功能可选。不存在ajax向服务器get的时候带回来cookie的功能。解决把AJAX代码改成原始的js代码来完成需求:正确的jsdocument.addEventListener('DOMContentLoaded',function(){document.querySelector('......
  • CF339 题解
    CF339题解这套题虽然是div2,但是具有一定的价值,这套题作为典型的div2题目,全套5道题都几乎用暴力方法解决,但是为什么这样是对的?令人深思。A红题,把个位数提出来再排序就好了。#include<bits/stdc++.h>usingnamespacestd;constintN=105;chars[N];intn,num[N],tot=0......
  • P1891 疯狂 LCM 题解
    一、题目描述:$T$ 组数据,每组数据给定$n$,求$\sum_{i=1}^{n}lcm(i,n)$数据范围:$1\leT\le3\times10^5,1\len\le1\times10^6$。 二、解题思路:个人觉得思维难度不大,只是要记住一个结论:$\sum_{d\midn}d=\frac{\varphi(n)\timesn}{2}$这个公式对......