AtCoder Beginner Contest 132 F

Stella981
• 阅读 760

数 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\n",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 */
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
ARC 067 E
题面在这里!(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Farc067.contest.atcoder.jp%2Ftasks%2Farc067_c)很显然是个暴力dp。我们先枚举一下队伍人数的种类,然后再逆序枚举一下dp数组里的总人数(顺序就会算重),最后枚举一下这种队
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
3年前
POJ 3179 离散化+二维前缀和+枚举(二分?)
离散化和前缀和以前做过,但是不熟,所以借鉴的lyd的代码(不过好像他也没用二分查找,虽然书上这么写的)不过代码中有一些剪枝和为下一步预处理的的操作可能优化了时间,反正62ms过了。。。附上代码:1include<cstdio2include<algorithm3include<cstring
Stella981 Stella981
3年前
PAT A1015Reversible Primes(可逆素数)
主要考察了判断一个10进制数是否为素数(isZS(intss))和怎么求一个十进制数的n进制数rec(intn,intm)代码:1include<cstdio2include<algorithm3include<iostream4include<string5
Wesley13 Wesley13
3年前
35岁是技术人的天花板吗?
35岁是技术人的天花板吗?我非常不认同“35岁现象”,人类没有那么脆弱,人类的智力不会说是35岁之后就停止发展,更不是说35岁之后就没有机会了。马云35岁还在教书,任正非35岁还在工厂上班。为什么技术人员到35岁就应该退役了呢?所以35岁根本就不是一个问题,我今年已经37岁了,我发现我才刚刚找到自己的节奏,刚刚上路。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这