首页 > 其他分享 >abc295-E

abc295-E

时间:2023-03-29 10:45:00浏览次数:54  
标签:int long ans mod abc295 qmod

题目链接:https://atcoder.jp/contests/abc295/tasks/abc295_e

一道数学好题,做完后深受启发。

思路:设\(A_k\)处的值为\(x\),则答案为:\(E(x) = \Sigma_1^m i*p(x = i) = 1*p(x=1)+2*p(x=2)+....+m*p(x=m) = p(x>=1)+p(x>=2)+...+p(x>=m) = \Sigma_1^m p(x>=i)\)。

接着枚举\(i\),运用组合数学的知识求解。

代码(c++):
#include<bits/stdc++.h>
using namespace std;
const int N = 2010,mod = 998244353;
int num[N];
long long c[N][N];
long long qmod(long long x,long long y){
	long long ans = 1;
	while(y){
		if (y&1) ans = ans*x%mod;
		y = y>>1;
		x = x*x%mod; 
	}
	return ans;
}
int main(){
	int n,m,k;
	cin>>n>>m>>k;
	c[0][0] = 1;
	for (int i=1;i<=2000;i++){
		c[i][0] = 1;
		for (int j=1;j<=i;j++){
			c[i][j] = (c[i-1][j-1]+c[i-1][j])%mod;
		}
	}
	for (int i=1;i<=n;i++) cin>>num[i];
	long long ans = 0;
	for (int i=1;i<=m;i++){
		int z = 0,mx = 0;
		for (int j=1;j<=n;j++){
			if (!num[j]) z++;
			else if (num[j]>=i) mx++; 
		}
		long long p1 = (m-i+1)*qmod(m,mod-2)%mod;
		long long p2 = (i-1)*qmod(m,mod-2)%mod;
		long long q = 0;
		for (int h=max(0,n-k+1-mx);h<=z;h++){
			q = (q+c[z][h]*qmod(p1,h)%mod*qmod(p2,z-h)%mod)%mod;
		}
		ans = (ans+q)%mod;
	}
	cout<<ans<<'\n';
}

标签:int,long,ans,mod,abc295,qmod
From: https://www.cnblogs.com/xjwrr/p/17268023.html

相关文章

  • 【题解】Atcoder ABC295 A-G
    A.ProbablyEnglish题目分析:直接每一个单词判一下就好了。代码:点击查看代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ intn;scanf("%d",&n); bo......
  • [ABC295Ex] E or m 题解
    状压dp,2hd4me/ng。题意开始你有一个全\(0\)矩阵,你可以随意执行如下操作:选择任意一行,将其从最左端开始的连续一段染成\(1\)。选择任意一列,将其从最上端开始的连......
  • AT_abc295_d 题解
    一、题目描述:给你一个由数字0~9组成的字符串,长度为N(1<=N<=500000)。求出满足1<=l<=r<=N且在l~r区间内所有数字都出现了偶数次的整数对l,r有多少对。......
  • ABC295 D题 题解
    题意简述给定一个长度不超过\(5\times10^5\)的,仅有数字构成的字符串,问存在多少段子串,使得子串内字符重新排序后,前半段与后半段相同?做法分析重组后前后两部分相同,其实也......
  • ABC295 A~C题解
    A-ProbablyEnglish共有\(n\)个单词,如果出现过and,not,that,the,you其中一个单词至少一次,输出\(Yes\),否则,输出\(No\)。(输入的单词均为小写)按题意模拟即可:#include<......