G 继续来数数

汇编语言与接口技术

https://ac.nowcoder.com/acm/contest/62880/A

题目大意: 给定一个长度为 nn 的非负整数数组 aa,保证 aa 中元素至少有 n1n−1 个数字互不相同。 求 aa 的长度为 kk 的不同子序列的方案数,输出答案取模1e9+71e9+7的结果。

解题思路:关注什么时候的子序列会重复,会发现在下图中,影响的子序列是不包含下标3355的数且选择了一个重复的数
alt

推广::设重复的数的下标为 pos1,pos2(pos1<pos2)pos1,pos2(pos1<pos2),总方案数易知为CnkC^k_n,重复的方案为选择一个重复的数,且不再选择pos1pos1pos2pos2范围的数(pos1pos2)(意为在pos1与pos2之间只选一个数),方案数为Cn(pos2pos1+1)k1C^{k-1}_{n-(pos2-pos1+1)},所以答案为CnkCn(pos2pos1+1)k1C^k_n-C^{k-1}_{n-(pos2-pos1+1)}

TipTip:组合数CnmC^m_n中当m>nm>n时,结果为00

参考代码:

#define LL long long
using namespace std;
const int M=1e5+7;
const LL Mod=1e9+7;
int T,n,k,x;
int a[M];
map<int,int> mp;
LL P[M],ipow[M];

LL C(int m,int n){
	if(m==0) return 1;
    if(n<m) return 0; //注意!!!
	return ((P[n]*ipow[m])%Mod*ipow[n-m])%Mod;
}


LL qpow(LL x,LL tim){
	LL ret=1,tmp=x;
	while(tim){
		if(tim&1){
			ret=ret*tmp%Mod;
		} 
		tmp=tmp*tmp%Mod;
		tim>>=1;
	}
	return ret;
}
int main(){
	ios::sync_with_stdio(false);
	cin>>T;
	P[0]=1;
	for(int i=1;i<=1e5+5;i++){
		P[i]=P[i-1]*i%Mod;
		//cout<<P[i]<<"\n";
	}
	ipow[0]=1;
	ipow[1]=1;
	for(int i=2;i<=1e5+5;i++){
		ipow[i]=qpow(P[i],Mod-2);
		//cout<<ipow[i]<<"\n";
	}
	while(T--){
		int pos1=0,pos2=0,f=0;
		cin>>n>>k;
		for(int i=1;i<=n;i++){
			cin>>a[i]; mp[a[i]]++;
			if(mp[a[i]]==2) {
				f=1;x=a[i];
			}
		}
		mp.clear();
		if(f==1){
			for(int i=1;i<=n;i++){
			    if(a[i]==x){
				     if(pos1) pos2=i;
				     else pos1=i;
			    }
		    }
		}
		if(f){
			cout<<(C(k,n)-C(k-1,n-pos2+pos1-1)+Mod)%Mod<<"\n";
		}
		else cout<<C(k,n)<<"\n";
	}
} 
全部评论

相关推荐

07-16 14:10
门头沟学院 Java
点赞 评论 收藏
分享
Twilight_m...:表格简历有点难绷。说说个人看法: 1.个人基本情况里好多无意义信息,什么婚姻状况、健康状况、兴趣爱好、户口所在地、身份证号码、邮政编码,不知道的以为你填什么申请表呢。 2.校内实践个人认为对找工作几乎没帮助,建议换成和测开有关的项目,实在没得写留着也行。 3.工作经历完全看不出来是干什么的,起码看着和计算机没啥关系,建议加强描述,写点你在工作期间的实际产出、解决了什么问题。 4.个人简述大而空,看着像AI生成,感觉问题最大。“Python,C,C++成为我打造高效稳定服务的得力工具”、“我渴望凭借自身技术知识与创新能力,推动人工智能技术的应用发展,助力社会实现智能化转型”有种小学作文的美感。而且你确定你个人简述里写的你都会嘛?你AI这块写的什么“深入研究”,发几篇顶会的硕博生都不一定敢这么写。而且你AI这块的能力和软测也完全无关啊。个人简述建议写你对哪些技术栈、哪些语言、哪些生产工具的掌握,写的有条理些,而且最好是和测开强相关的。
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务