首页 > 其他分享 >Codeforces-1753B Factorial Divisibility题解

Codeforces-1753B Factorial Divisibility题解

时间:2022-11-06 15:44:45浏览次数:73  
标签:cnt ch Divisibility Factorial 题解 Codeforces int 因子 整除

Codeforces-1753B Factorial Divisibility

  参考:https://blog.csdn.net/qq_38236082/article/details/127500190

  题意:问$a_1!+a_2!+a_3!+...+a_n!$能否被$x!$整除。

  思路:暴力肯定不行的,$x!$无法正常存储。考虑其他做法,由于$x!=x*(x-1)*(x-2)*...*2*1$,要想能被$x!$整除,和中一定存在这$x$个因子。

  举一个例子,假设给定的数是$2!$,$2!$,$4!$,$5!$,$x=5$。

  对于$2!+2!+4!+5!$,我们先拆出一部分因子$2!$,这部分因子是必定存在于最终的和中的。左边除去$2!$后我们剩下什么?剩下$1+1+3*4+3*4*5$,很容易发现,这部分不能够被$3$整除,也就是说,剩余的这一部分不存在$3$这个因子(而$3$这个因子是存在于$x!$中的!)。因此这个例子不能被$x$整除。

  如果要求其能被$x!$整除,应该是什么样的数据呢?很容易想到,对于(上面那个例子)左边除去$2!$后,只有剩下的部分能够被$3$整除,这个判断才能够继续下去。因此我们更改数据为$2!$,$2!$,$2$,$4!$,$5!$,$x=5$。此时除去$2!$后,剩余$1+1+1+3*4+3*4*5$,可以被$3$整除。我们继续拆去$3$这个因子,除去$3$剩余$1+4+4*5$,判断出还是不行。但是我们已经基本了解了应该怎么判断——先对$a[n]排序,$取$cnt[i]$,记录这一串和中,$i!$的个数,随后从扫描$1~(x-1)$,对于数$i$,$cnt[i]$如果不是$i+1$的倍数(即不能提供出$i+1$因子),就直接判断不能整除;如果是倍数,我们将$cnt[i]/(i+1)$加到$cnt[i+1]$上。

  由于注意到$n$非常大,我们还可以浅浅开个小快读,但不是必要。

 

#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=5e5;
const int maxx=5e5;

int n,x;
int a[maxn+5];
int cnt[maxx+5];

inline int read(){
    register int ch=getchar(),x=0,f=1;
    while (ch<'0'||ch>'9'){
        if (ch=='-')    f=-1;
        ch=getchar();
    }
    while (ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}

int main(){
//    freopen("1.txt","r",stdin);
    n=read(),x=read();
    for (int i=1;i<=n;i++)
        cnt[a[i]=read()]++;
    sort(a+1,a+n+1);
    for (int i=1;i<x;i++)
        if (cnt[i]%(i+1)){
            printf("No");
            return 0;
        }
        else
            cnt[i+1]+=(cnt[i]/(i+1));
    printf("Yes");
    return 0;
} 

 

标签:cnt,ch,Divisibility,Factorial,题解,Codeforces,int,因子,整除
From: https://www.cnblogs.com/wegret/p/16862508.html

相关文章

  • 题解 [AGC044C] Strange Dance
    这道题启示我们Trie树是可以支持全局下标加\(1\)的。首先把\(3^n\)个人从低位到高位建到三进制Trie树上。类似二叉树的左右儿子,我们称由\(0,1,2\)边连接的儿子......
  • KMP 自动机,孤独的自动机(同时也是CF1721E的题解)
    给定字符串\(s\),以及\(q\)个串\(t_i\),求将\(s\)分别与每个\(t_i\)拼接起来后,最靠右的\(|t_i|\)个前缀的border长度。询问间相互独立。\(|s|\leq10^6,q......
  • 【题解】洛谷P2725 [USACO3.1]邮票 Stamps
    从n种邮票中选出不超过k张邮票,使选出来的邮票可以表示1~m之间(含)的所有数。每张邮票在不超过k的前提下,都可以使用无数次,因此可以将问题看成一个完全背包问题。n种邮票就是n......
  • [ARC069F]Flags 题解
    因为一个小错误整整调了一天qwq除去2-SAT部分没学过去学了一下,其它部分都想出来了,四舍五入我自己写了一道Cu,好欸(虽然这Cu好像非常水QAQ)。F-Flags一条数轴上有......
  • P8813(CSP-J2022T1)题解
    题意:算a ^ b,如果结果超出1e9就输出-1,反之输出结果。思路:边算边判加特判。代码:#include<cstdio>#definelllonglong#definemx1e9//边界usingnamespacestd;i......
  • P8814(CSP-J2022T2)题解
    题意:给定一个正整数 k,有k 次询问,每次给定三个正整数 n, e, d,求两个正整数 p, q,使 n = p × q且e × d =(p −1)×(q −1)+1。思路:通过题意可以发......
  • AtCoder Beginner Contest 276 A~G 题解
    今天凌晨CFD题差一句判断AC,晚上ABCG题把插板法和快速幂搞混差点AC。事不过三,再这样一次我直接紫砂。太简单的题就不放翻译和代码了。(事实上这场A-E都是大水题......
  • 个人比赛实况和题解
    CodeforcesCF1740:实况:https://pan.baidu.com/s/1BYjUp2Atvqkpqe3jVogPTQ(提取码:1104);题解:https://www.cnblogs.com/lucius7/p/16861747.html。AtCoderabc275:实况:https://p......
  • 洛谷P8757 [蓝桥杯 2021 省 A2] 完美序列 题解
    思路为使描述方便,先令题目描述中的“完美序列”反转(即序列单调递增且每一个数都是上一个数的倍数)。原“完美序列”与反转后的本质相同。先考虑最大长度。显然,当完美序列......
  • 洛谷P8775 [蓝桥杯 2022 省 A] 青蛙过河 题解 贪心+二分答案
    题目链接​​https://www.luogu.com.cn/problem/P8775​​题目大意小青蛙住在一条河边,它想到河对岸的学校去学习。小青蛙打算经过河里的石头跳到对岸。河里的石头排成了一条......