zoukankan      html  css  js  c++  java
  • 55 D. Beautiful numbers

    题意:
    一个整数是beautiful的当且仅当它的所有非零数位都可以整除它,求区间范围内beautiful数个数.
    题解:
    ([l,r])可以转化为([0,r])的答案减去([0,l))的答案.
    使用数位dp,状态为(dp[i][j][p][q])表示枚举到第(i)位,前缀是否不同((j)),出现的非零数位最小公倍(p),前缀模(2520)的余数((q)).
    由于(p)的取值只有(d(2520)=48)种,因此复杂度约为(2cdot19cdot2cdot48cdot2520cdot10cdot10=919296000approx9 imes10^8),由于常数较小可以通过.
    代码
    优化:
    注意到模(8)的余数仅由最后(3)位决定,模(5)的余数仅由最后一位决定,可以优化每一位的模数范围,具体地:前面为(63),最后三位分别为(126),(252),(2520).
    复杂度变为(2cdot2cdot48cdot(16 * 63 + 126 + 252 + 2520)cdot10cdot10=74995200approx7 imes10^7).
    代码

  • 相关阅读:
    kill process
    USB development guide
    MMC device
    memtester
    printf()格式化输出详解
    C语言动态内存分配
    归并排序C语言
    c 文件操作
    数据包分析
    C语言文件操作函数大全
  • 原文地址:https://www.cnblogs.com/Heltion/p/13404729.html
Copyright © 2011-2022 走看看