zoukankan      html  css  js  c++  java
  • AtCoder Beginner Contest 132 F

    数 sqrt 缩小范围

    整除分块

      1 #include <cstdio>
      2 #include <cstdlib>
      3 #include <cmath>
      4 #include <cstring>
      5 #include <string>
      6 #include <algorithm>
      7 #include <iostream>
      8 using namespace std;
      9 #define ll long long
     10 
     11 const int maxn=1e5+10;
     12 const ll mod=1e9+7;
     13 const double eps=1e-8;
     14 
     15 ll f[110][maxn],add[maxn],cnt[maxn];
     16 
     17 /**
     18 大于sqrt(maxvalue)的x,
     19 肯定是其它数到x,到从x到其它数
     20 
     21 计数 用 整除分块
     22 **/
     23 
     24 int main()
     25 {
     26     ll n,siz,mid,mmid,l,r,i,j,g=0,sum=0;
     27     scanf("%lld%lld",&siz,&n);
     28     mmid=sqrt(siz+eps);
     29     mid=siz/(mmid+1);
     30     g=0;
     31     for (l=1;l<=siz;l=r+1)
     32     {
     33         ///[l,r]
     34         r=siz/(siz/l);
     35 //        printf("%lld %lld %lld
    ",l,r,siz/l);
     36         if (siz/l<=mid)
     37             cnt[siz/l]=r-l+1;
     38     }
     39 
     40     for (j=1;j<=mmid;j++)
     41         f[1][j]=1;
     42     for (i=2;i<=n;i++)
     43     {
     44         g=0;
     45         for (j=1;j<=mmid;j++)
     46             (g+=f[i-1][j])%=mod;
     47         for (j=1;j<=mmid;j++)
     48             f[i][j]=g;
     49 
     50         for (l=1;l<=mid;l++)
     51             add[l]=(add[l-1]+f[i-2][l])%mod;
     52 
     53         g=0;
     54         for (l=mid;l>=1;l--)
     55         {
     56             (g+=add[l]*cnt[l])%mod;
     57             (f[i][l]+=g)%=mod;
     58         }
     59     }
     60 
     61 
     62     for (j=1;j<=mmid;j++)
     63         (sum+=f[n][j])%mod;
     64     for (l=1;l<=mid;l++)
     65     {
     66         add[l]=(add[l-1]+f[n-1][l])%mod;
     67         (sum+=add[l]*cnt[l])%=mod;
     68     }
     69 
     70     ///
     71     memset(f,0,sizeof(f));
     72     g=0;
     73     for (l=mid;l>=1;l--)
     74     {
     75         (g+=cnt[l])%mod;
     76         f[1][l]=g;
     77     }
     78     n--;
     79     for (i=2;i<=n;i++)
     80     {
     81         g=0;
     82         for (j=1;j<=mmid;j++)
     83             (g+=f[i-1][j])%=mod;
     84         for (j=1;j<=mmid;j++)
     85             f[i][j]=g;
     86 
     87         for (l=1;l<=mid;l++)
     88             add[l]=(add[l-1]+f[i-2][l])%mod;
     89 
     90         g=0;
     91         for (l=mid;l>=1;l--)
     92         {
     93             (g+=add[l]*cnt[l])%mod;
     94             (f[i][l]+=g)%=mod;
     95         }
     96     }
     97 
     98     for (j=1;j<=mmid;j++)
     99         (sum+=f[n][j])%mod;
    100     for (l=1;l<=mid;l++)
    101     {
    102         add[l]=(add[l-1]+f[n-1][l])%mod;
    103         (sum+=add[l]*cnt[l])%=mod;
    104     }
    105 
    106 
    107     printf("%lld",sum);
    108     return 0;
    109 }
    110 /*
    111 special
    112 100=10*10
    113 
    114 100 3
    115 1 1 100
    116 2 2 50
    117 3 3 33
    118 4 4 25
    119 5 5 20
    120 6 6 16
    121 7 7 14
    122 8 8 12
    123 9 9 11
    124 10 10 10
    125 ///
    126 11 11 9
    127 12 12 8
    128 13 14 7
    129 15 16 6
    130 17 20 5
    131 21 25 4
    132 26 33 3
    133 34 50 2
    134 51 100 1
    135 
    136 
    137 23 3
    138 1 1 23
    139 2 2 11
    140 3 3 7
    141 4 4 5
    142 ///
    143 5 5 4
    144 6 7 3
    145 8 11 2
    146 12 23 1
    147 
    148 
    149 31622*log(n) *100
    150 
    151 10 5
    152 1 1 10
    153 2 2 5
    154 3 3 3
    155 
    156 4 5 2
    157 6 10 1
    158 
    159 */
  • 相关阅读:
    从Go语言编码角度解释实现简易区块链——打造公链
    CSAPP:位操作实现基本运算
    虚拟机Ubuntu系统无法连接网络解决方案
    CSAPP:逆向工程【二进制炸弹】
    分析一套源代码的代码规范和风格并讨论如何改进优化代码
    【Recorder.js+百度语音识别】全栈方案技术细节
    webpack4.0各个击破(5)—— Module篇
    webpack4.0各个击破(4)—— Javascript & splitChunk
    webpack4.0各个击破(3)—— Assets篇
    javascript基础修炼(4)——UMD规范的代码推演
  • 原文地址:https://www.cnblogs.com/cmyg/p/11108256.html
Copyright © 2011-2022 走看看