题意:给定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();
}