zoukankan      html  css  js  c++  java
  • 2019.10.05'题解

    T1

    模拟即可,清空时要注意时间限制

    T2

    是个挺好的数学题,有必要缕一下思路

    首先定义:

    Fp(x,y)为满足$ x^b|y $的最大的b,

    Ext(x,y)为$ frac{y}{Fp(x,y)} $

    (不难发现Ext函数是一个完全积性函数即Ext(x,y)*Ext(x,z)=Ext(x,y*z)。)

    所以问题转化为求$ Ext(10,n!)%10^k $

    也就是$ frac{Ext(5,n!)}{2^(Fp(5,n!))} $

    于是考虑把$ 10^k $化为$ 2^k*5^k $,分别求出上面的值后CRT一下。

    我们发现当n稍大时%2^k便是0,所以可以特判跑暴力。

    现在最主要的便是求出Ext(5,n!)。

    把n!拆开看一看:

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28......

    加粗的全是5的倍数,可以递归求解Ext(5,(n/5)!)

    剩下的在mod p意义下由⌊n/p⌋个循环节和剩下的n%p构成,预处理即可。

    最后把式子化成最一般的:(图片来源于学长rvalue)

    T3

    我们可以把1~k看作一个hash,之后每次操作便变成了乘上一个base,再加上该加的值。

    可以用线段树维护两个标记:f[k],g[k]分别代表乘上多少,加上多少。

    注意当标记叠加时,乘一个数要把g[]也乘上同样的值。加上一个数对f[]无影响。

  • 相关阅读:
    C语言数组和字符串函数
    C语言控制语句
    C语言输入输出函数
    C语言运算符
    C语言数据类型
    嵌入式开发基础知识
    VI编辑器的使用
    Linux文件系统和目录相关命令
    前段之必学(转载)
    26个高效工作的小技巧(转载)
  • 原文地址:https://www.cnblogs.com/AthosD/p/11626764.html
Copyright © 2011-2022 走看看