zoukankan      html  css  js  c++  java
  • 10.24模拟赛总结

    由于今天父亲让我到学校,然而学校封场,所以晚了很久。
    先看A。A看上去是个medium难度的题。
    再看B。B发现是个打表题。
    再看C。C是agc上一道题(agc009E)的加强版。
    原题在当场只有2人AC。
    我做出来的概率很小。
    D是我不擅长的题,一点思路也没有。
    接着回来看A,发现dfs合法的乘积种类数较少。
    然后dp即可算出合法对数。
    想了一小会就想出来了。
    是个简单题。
    但是要使用一个类似高维前缀和的东西。
    B怕全场AC,把很多时间用来打表。
    打表了很久才找到规律,发现是错的。
    如果要改成对的规律,需要更高的时间复杂度,只能过60分。
    (实际上我再次算错复杂度)
    以为分块打表会超过代码长度的限制(然而并不)。
    最后没时间写60分,就用结论写了30分。
    A
    (dig(x))显然是若干个(leq 9)的数相乘后得到的。
    所以(dig(x))显然能被表示成(2^acdot 3^bcdot 5^ccdot 7^d)的形式。
    如果写一个搜索发现满足这个形式的数并不多。
    这是因为满足这个形式的数的个数显然是不会超过(log_2^4n)的。而且跑不满这个限制。
    如果我们搜出所有合法的数,设(f_{a,b,c,d})表示能被表示成(2^acdot 3^bcdot 5^ccdot 7^d)的形式的数的个数,这显然是可以使用简单的数位dp算出来的。
    在状态中记录长度,是否达到上界即可。
    考虑如何计算答案。
    发现欧式(gcd)不太能做。所以考虑质因数分解的(gcd)
    两个数(2^ecdot 3^fcdot 5^gcdot 7^h)(2^acdot 3^bcdot 5^ccdot 7^d)的最大公约数显然是他们的指数取(min)(2^{min(e,a)}cdot 3^{min(f,b)}cdot 5^{min(g,c)}cdot 7^{min(h,d)})
    此时设(g_{a,b,c,d}=f_{a,b,c,d}^2),则发现(g_{a,b,c,d})(gcd)(2^acdot 3^bcdot 5^ccdot 7^d)倍数的数。
    如果对(g)进行高维差分,则(g_{a,b,c,d})就是(gcd)恰好是(2^acdot 3^bcdot 5^ccdot 7^d)的数。
    枚举(leq k)的所有合法数,把他们的(g)加起来就能得到答案。
    B
    对答案打表发现,(n)合法的充要条件是(n+1)为质数而且不存在(n)的任何约数(d)使得(2^dmod (n+1)=1)
    然后暴力做时间复杂度是(nd)的,(d)是平均约数个数。
    这个东西不高于(nsqrt{n})
    注意到如果(d)符合上面的(2^dmod (n+1)=1),则(kd)也符合。
    这样子发现我们只需要判断(n/d)即可,其中(d)(n)的质因数。
    接下来分块打表即可。
    C

  • 相关阅读:
    功能工作第五天终于有点眉目了
    SSM上传图片并保存图片地址到数据库
    基于Maven搭建SSM框架eclipese版本
    菜鸟初到公司应该准备的开发环境
    IDEA+Maven+SSM框架实现的简单的增、删、改、查
    如何在IDEA 中使用Git
    maven-ssm项目整合
    关于线程的知识模块
    百度地图api,使用QT同时绘制多个标注
    win10系统QT5下配置opencv教程
  • 原文地址:https://www.cnblogs.com/ctmlpfs/p/13868329.html
Copyright © 2011-2022 走看看