题意:给定n个数,判断这n个数的阶乘的和是否能被k的阶乘整除。

题解:首先无法暴力求解阶乘,会出现爆int或者爆long long的情况。

我们不难发现(x+1)!=x!*(x+1),利用这个结论依次向上进行推导判断,就可以得出答案。

AcCode:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+7;
map<int,int>mp;

void solve(){
	int n,k;
	scanf("%d%d",&n,&k);
	for(int i=1;i<=n;i++){
		int x;
		scanf("%d",&x);
		mp[x]++;
	}
	for(int i=1;i<k;i++){
		if(mp[i]%(i+1))return (void)puts("NO");
		mp[i+1]+=mp[i]/(i+1);
	}
	puts("YES");
} 

int main(){
	int t=1;
//	cin>>t;
	while(t--)solve();
}