列表

详情


NC213472. 爱丽丝的人偶(二)

描述

爱丽丝有个人偶,第 个人偶的型号为
现在爱丽丝要拿出其中个人偶,满足这个人偶的型号互不相同。
爱丽丝想知道自己有多少多不同的方案数?
注:若两个人偶的型号相同,那么无论拿她们中的哪一个都是等价的。
请将方案数对取模。

输入描述

第一行输入两个正整数,用空格隔开。
第二行输入个正整数,代表这个人偶的型号。

输出描述

一个整数,代表最终方案的数量对取模的值。

示例1

输入:

5 2
1 2 3 2 1

输出:

3

说明:

一共有{1,2}{1,3}{2,3}这三种不同的方案(型号组合)。
请注意,拿第一个和第三个、第三个和第五个最终的型号组合都是{1,3},被视为同一种方案。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++11) 解法, 执行用时: 81ms, 内存消耗: 5276K, 提交时间: 2020-11-21 14:08:03

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod = 1e9+7;
const int N = 1e5+10;
unordered_map<ll,int> mp;
ll f[N];
ll qpow(ll a,ll b){
	ll ans=1;
	while(b){
		if(b&1) ans=ans*a%mod;
		a=(a*a)%mod;
		b>>=1;
	}
	return ans;
}
int main(void){
	int n,k;
	cin>>n>>k;
	f[0]=1;
	for(int i=1;i<=n;i++){
		ll x;
		cin>>x;
		mp[x]++;
		f[i]=f[i-1]*i%mod;
	}
	n=mp.size();
	if(n<k)
		cout<<0;
	else
		cout<<(f[n]*qpow(f[k]*f[n-k]%mod,mod-2)%mod);
	
	return 0;	
} 

Python3 解法, 执行用时: 1818ms, 内存消耗: 22616K, 提交时间: 2022-09-14 21:04:21

import math
n,k=map(int,input().split())
s=list(map(int,input().split()))
li=set(s)
#print(li)
print(int(math.comb(len(li),k)%1000000007))

上一题