题解 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;
}

谢谢大家!

posted @ 2022-10-24 21:38  Chen_Jinhui  阅读(35)  评论(0)    收藏  举报  来源