题解 CF1753B 【Factorial Divisibility】
大家好,我是 CQ-C2024 蒟蒻 CJH。
难度:普及/提高-。
标签:数学。
题意
给定 $n$ 个数 $a_1,a_2,\dots,a_n$,求出 $\sum\limits_{i=1}^n{a_i!} \bmod x!$ 是否等于 $0$。
思路
根据阶乘的定义我们可知:$$ (x+1) \times x!=(x+1)! $$ 所以思路就非常清晰了,我这里将 $i$ 阶乘出现的次数记为 $b_i$,然后统计 $b_1,b_2,\dots,b_x$。
接着枚举 $1 \sim x-1$ 进行合并同类项的操作,如果 $b_i \bmod (i+1) \ne 0$,那就肯定不符合整除的要求。
如果最终可以合并到底,就说明是符合要求的。
代码
//the code is from chenjh
#include<bits/stdc++.h>
#define P puts("WA")
using namespace std;
int a[500005];//这里用 a 数组来记录 i 阶乘出现的次数
int main(){
int n,x;
scanf("%d%d",&n,&x);
for(int i=1,y;i<=n;i++)
scanf("%d",&y),++a[y];
for(int i=1;i<x;i++){
if(a[i]%(i+1)) return puts("No"),0;//判断是否能整除。
a[i+1]+=a[i]/(i+1);//向 (i+1)! 合并。
}
// printf("%d\n",a[x]);
puts(a[x]?"Yes":"No");//如果结果为真(正数),即为正确。
return 0;
}
谢谢大家!

浙公网安备 33010602011771号