ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

「CF1227F2」题解

2021-11-27 16:00:47  阅读:118  来源: 互联网

标签:int 题解 ll CF1227F2 ans binom sum Mod


Description

CF1227F2 Wrong Answer on test 233 (Hard Version)

题目大意就是给定一个序列 \(h\),问有多少序列 \(a\),满足 \(a\) 与 \(h\) 的相似度小于 \(a\) 与 \(h\) 左移后的相似度。
或者你叫汉明距离也行。
称左移后的 \(h\) 为 \(h'\)。
容易想到若 \(a_i=h_i\) 这一位无论取多少都不影响最终结果,假设有 \(tot\) 个这样的位置,这部分的贡献就是 \(m^{tot}\)。
先将 \(n\) 减去 \(tot\)。
否则假设剩下位置中 \(a\) 个位置为与 \(h_i\) 相同,\(b\) 个位置与 \(h'_i\) 相同。

\[ans=\sum_{a=1}^{n}\sum_{b=0}^{a-1}\binom{n}{a}\binom{n-a}{b}(m-2)^{n-a-b} \]

预处理 \(m-2\) 的次方后时间复杂度 \(\Theta(n^2)\),可过简单版。
考虑化简式子。

\[\sum_{a=1}^{n}\sum_{b=0}^{a-1}\binom{n}{a}\binom{n-a}{b}\\ =\sum_{a=\frac{n}{2}}^{a+b}\binom{n}{a+b}\binom{a+b}{a}\\ =\frac{\binom{n}{a+b}2^{a+b}}{2} \]

枚举 \(a+b\) 即可,若 \(a+b\) 为偶数还要减去一个 \(\binom{a+b}{\frac{a+b}{2}}\)。
就没了。
时间复杂度 \(\Theta(n)\)(我没预处理,带个 \(\log\))
Code:

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std; 
const int MAXM=4e5+5;
const int M=4e5;
const int Mod=998244353;
#define ll long long
int n,m,a[MAXM],tot;
ll fra[MAXM],ofra[MAXM],Ans,doo;
ll ksm(ll a,int b){
	ll ans=1;
	while(b){
		if(b&1) ans=ans*a%Mod;
		a=a*a%Mod;b>>=1;
	}
	return ans;
}
ll C(int n,int k){
	if(k>n) return 0;
	return (fra[n]*ofra[k]%Mod)*ofra[n-k]%Mod;
}
int main(){
	fra[0]=1;
	for(int i=1;i<=M;i++){
		fra[i]=fra[i-1]*i%Mod;
	}
	ofra[M]=ksm(fra[M],Mod-2);
	for(int i=M;i;i--){
		ofra[i-1]=ofra[i]*i%Mod;
	}
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=1;i<=n;i++){
		if(a[i]==a[i%n+1]) tot++;
	}
	doo=ksm(m,tot);
	n-=tot;
	for(int i=1;i<=n;i++){
		ll tmp=ksm(2,i);
		if(i%2==0){
			tmp=(((tmp-C(i,i/2))%Mod)+Mod)%Mod;
		}
		tmp=tmp*ksm(2,Mod-2)%Mod;
		tmp=tmp*C(n,i)%Mod;
		Ans=(Ans+ksm(m-2,n-i)*tmp)%Mod;
	}
	printf("%lld\n",Ans*doo%Mod);
	return 0;
}

标签:int,题解,ll,CF1227F2,ans,binom,sum,Mod
来源: https://www.cnblogs.com/StranGePants/p/15609822.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有