首页 > 其他分享 >CF1765C Card Guessing 题解

CF1765C Card Guessing 题解

时间:2024-04-30 18:00:11浏览次数:30  
标签:md Guessing 题解 ll 4n choose ans fac CF1765C

考虑期望的线性性,求每种情况猜对的概率和,最终再除掉 \({4n \choose n,n,n,n}\)。

考虑枚举最少的出现次数 \(mn\),记四种卡的出现次数分别为 \(c_1,c_2,c_3,c_4\),\(c_1+c_2+c_3+c_4=i\le k\),则这种情况的方案数为:

\[{i\choose c_1,c_2,c_3,c_4}{4n-i\choose n-c_1,n-c_2,n-c_3,n-c_4}\frac{{4n-i-1\choose n-mn-1}}{{4n-i\choose n-mn}} \]

即:

\[\frac{c!}{c_1!c_2!c_3!c_4!}\frac{(4n-c-1)!\max(n-mn,1)}{(n-c_1)!(n-c_2)!(n-c_3)!(n-c_4)!} \]

做一遍背包即可,时间复杂度 \(\mathcal O(n^3)\)。

参考代码:

#include<bits/stdc++.h>
#define ll long long
#define md 998244353
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define rept(i,a,b) for(int i=a;i<b;++i)
#define drep(i,a,b) for(int i=a;i>=b;--i)
using namespace std;
int n,k;
ll ans,f[2002],f1[2002],dp[503],fac[2003],ifac[2003];
ll power(ll x,int y){
	ll ans=1;
	for(;y;y>>=1){
		if(y&1)ans=ans*x%md;
		x=x*x%md;
	}
	return ans;
}
signed main(){
	fac[0]=1;
	rep(i,1,2000)fac[i]=fac[i-1]*i%md;
	ifac[2000]=power(fac[2000],md-2);
	drep(i,2000,1)ifac[i-1]=ifac[i]*i%md;
	cin>>n>>k,k=min(k,(n<<2)-1);
	drep(mn,n,0){
		rep(i,0,k)f[i]=0;
		f[0]=1;
		rept(c,0,4){
			rep(i,0,k)f1[i]=0;
			rep(i,0,k){
				rep(j,mn,min(i,n))f1[i]=(f1[i]+f[i-j]*ifac[j]%md*ifac[n-j])%md;
			}
			rep(i,0,k)f[i]=f1[i];
		}
		rep(i,0,k)dp[mn]=(dp[mn]+f[i]*fac[i]%md*fac[(n<<2)-i-1]%md*(i<k?1:(n<<2)-k))%md;
		rep(i,mn+1,n)dp[mn]=(dp[mn]-dp[i])%md;
		ans=(ans+dp[mn]*max(n-mn,1))%md;
	}
	cout<<(ans*ifac[n<<2]%md*fac[n]%md*fac[n]%md*fac[n]%md*fac[n]%md+md)%md;
	return 0;
}

标签:md,Guessing,题解,ll,4n,choose,ans,fac,CF1765C
From: https://www.cnblogs.com/zifanoi/p/18168511

相关文章

  • 题解 CF1965E【Connected Cubes】
    场切了1E,第一次上IGM,纪念一下。多图警告。我们称题目中的一个方块为“某色混凝土”。感受一下,发现本题主要的难点在于这些混凝土方块排布得太紧密了,导致容易出现互相遮挡的现象,进而难以构造。于是,我们先思考能否通过一些操作使得这些混凝土互相分离。如下图的方式可以将每两......
  • CF1956F Nene and the Passing Game 题解
    题目链接点击打开链接题目解法首先答案为连边之后连通块的个数把限制中的\(i,j\)分开,则\(i,j\)能传球当且仅当\(i+l_i\lej-l_j\)且\(j-r_j\lei+r_i\)这是一个二维偏序的形式先考虑怎么暴力做,考虑将\((i+l_i,0),\;(i-l_i,1)\)排序,然后按顺序加入如果碰到操作\(......
  • npm下载包时报错 Unexpected token '.'问题解决
    1.出现问题当通过nvm切换nodejs版本为16以上时,npminstall[package]报错:Unexpectedtoken'.'2.问题原因该问题不是npm的问题,也不是nodejs的问题,是nvm-windows的问题。3.解决问题nvm-windows已经更新版本解决了这个问题我是通过更新nvm-windows到版本1.19解决了这个问题......
  • Atcoder ABC 351 全题解
    乾岩我:G题来咯!!!大火:这G题,大家都不敢做,说是有人在里面放了毒瘤。我:做,做,为什么不做!不做也别想活着!!!(两天后)我:我的G题完成辣!!!!!!AB不讲C显然$2^a*2=2^{a+1}$。考虑用一个栈存球的大小是$2$的多少次方,每次插入球后,不断取出后面两个球,大小相同则合并,否则插入下一个......
  • XYCTF pwn部分题解 (部分题目详解)
    hello_world(签到)思路:✅这道题就是利用printf函数泄露libc的基地址,然后再次进行栈溢出通过system,/bin/sh来获取shellwp:invisible_flag思路:✅题目提示orw,那我们先看看是否开了沙盒那么是开了沙盒的,试试orw读取flag虽然保护全开但是程序会执行我们写的shellcdoe那么就可......
  • 二叉树笔试题解题思路
    数据结构二叉树笔试题:解题思路:1.判断是否为空树,若为空树,则返回0;2.定义两个指针备份根结点地址,定义两个整型变量a,b并初始化为0,记录左右子树的深度;先对根结点的左子树进行遍历,若根结点的左结点不为NULL,则a++,把根结点的左结点赋值为新的根结点,再进行上述操作,若根结点的左结点......
  • AtCoder-abc350_g 题解
    原题链接题意简述有一个无向图,初始时没有边。接下来有一些操作:将\(u,v\)连边。询问\(u,v\)的距离是否为\(2\),如果是,则输出中间的那个点的编号,否则输出0。每次询问后,更新\(lastans\)为询问的答案,初始时为\(0\)。每次操作的\(opt,u,v\)使用\(lastans\)解码,......
  • AtCoder-abc350_f 题解
    原题链接题意简述给定一个字符串\(S\),对于每个匹配的括号,将括号内的字符左右翻转并大小写反转,然后删除括号。输出最后的序列。思路本题为文艺平衡树的模板题。扫一遍字符串进行括号匹配,每次把最内层的括号进行操作。最后遍历一遍平衡树,将不为括号字符的字符输出。FHQ_Treap......
  • 【题解】 量化交易1
    题目描述applepi训练了一个可以自动在股票市场进行量化交易的模型。通常来说,applepi写出的模型,你懂得,就好比一架印钞机。不过为了谨慎起见,applepi还是想先检查一下模型的效果。applpie收集了“塞帕思股份(surpass)”在最近的连续N天内的价格。在每一天中,他可以做如下事情之一:......
  • 【题解】 量化交易2
    题目描述applepi训练了一个可以自动在股票市场进行量化交易的模型。通常来说,applepi写出的模型,你懂得,就好比一架印钞机。不过为了谨慎起见,applepi还是想先检查一下模型的效果。applpie收集了“塞帕思股份(surpass)”在最近的连续N天内的价格。在每一天中,他可以做如下事情之一:......