【LGR-072】回首过去
题目
点这里看题目。
分析
可以发现,符合条件的分数约分后,其分母必须为\(2^m5^k\)。因此,原分数一定可以表示为:
\]
其中\((10,X)=1, XY\le n, 2^m5^kX\le n\)。
可以发现,这样枚举可以保证分母不重复,因而保证枚举出的分数不重复。
考虑\(X\)的大小限制:
\]
再考虑\(Y\)对\(X\)的影响。设阈值\(T=\lfloor\frac n{\lfloor\frac n {2^m5^k}\rfloor}\rfloor\)。当\(Y<T\)时,\(X\)受到上式的约束;当\(Y\ge T\)时,\(X\)受到条件\(XY\le n\)的约束。
设\(p(x)=\sum_{i=1}^x[(10,i)=1]\),即\([1,x]\)中与\(2,5\)互质的数的个数,我们可以用容斥原理快速计算\(p\)的值。
发现,如果用\(f(y)\)表示当\(Y=y\)时,\(X\)的取值的个数,那么它就是一个分段函数:
\begin{cases}
p(\lfloor\frac n {2^m5^k}\rfloor) & y<T\\
p(\lfloor\frac n y\rfloor) & y \ge T
\end{cases}
\]
当\(m,k\)确定时,答案即为\(\sum_{i=1}^n f(i)\)。当\(y<T\)时,贡献可以直接暴力计算;当\(y>T\)时,我们可以预处理前缀和。
\(m\)和\(k\)都可以枚举,因此计算答案的时间是\(O(n+\log_2n\log_5n)\)。
恭喜,有 80pts 了
考虑优化,由于\(T\)的取值数量为\(O(\sqrt n)\),因此我们可以直接数论分块,留下需要的点求出前缀和。时间复杂度\(O(\sqrt n + \log_2n\log_5n)\)。
代码
#include <cmath>
#include <cstdio>
typedef long long LL;
#define int LL
const int MAXN = 2e6 + 5;
template<typename _T>
void read( _T &x )
{
x = 0;char s = getchar();int f = 1;
while( s > '9' || s < '0' ){if( s == '-' ) f = -1; s = getchar();}
while( s >= '0' && s <= '9' ){x = ( x << 3 ) + ( x << 1 ) + ( s - '0' ), s = getchar();}
x *= f;
}
template<typename _T>
void write( _T x )
{
if( x < 0 ){ putchar( '-' ); x = ( ~ x ) + 1; }
if( 9 < x ){ write( x / 10 ); }
putchar( x % 10 + '0' );
}
template<typename _T>
_T MIN( const _T a, const _T b )
{
return a < b ? a : b;
}
LL su[MAXN], seq[MAXN], p2[MAXN], p5[MAXN];
int id1[MAXN], id2[MAXN];
LL N, rt, ID;
int& getID( const LL v )
{
if( v <= rt ) return id1[v];
return id2[N / v];
}
LL query( LL up ) { return up - up / 2 - up / 5 + up / 10; }
signed main()
{
read( N ), rt = sqrt( N );
for( LL l = 1, r, v ; l <= N ; l = r + 1 )
{
r = N / ( v = N / l );
seq[++ ID] = v, getID( v ) = ID;
}
for( int i = ID ; i ; i -- ) su[i] = su[i + 1] + ( seq[i] - seq[i + 1] ) * query( N / seq[i] );
LL ans = 0;
int siz2, siz5;
p2[0] = 1, p5[0] = 1;
for( siz2 = 0 ; p2[siz2] <= N ; ) siz2 ++, p2[siz2] = p2[siz2 - 1] << 1;
for( siz5 = 0 ; p5[siz5] <= N ; ) siz5 ++, p5[siz5] = p5[siz5 - 1] * 5;
for( int i = 0 ; i < siz2 ; i ++ )
for( int j = 0 ; j < siz5 && p2[i] * p5[j] <= N ; j ++ )
if( p2[i] * p5[j] <= N )
{
LL tmp = N / ( N / p2[i] / p5[j] );
ans += su[getID( N )] - su[getID( tmp )] + query( N / tmp ) + ( tmp - 1 ) * query( N / p2[i] / p5[j] );
}
write( ans ), putchar( '\n' );
return 0;
}
【LGR-072】回首过去的更多相关文章
- Laravel 部署安装到虚拟主机的方法(折腾了一周,终于成功部署,原来是虚拟机不加载.env,谢谢莫回首http://lxl520.com/index.php/archives/88/!)
作者:莫回首链接:https://www.zhihu.com/question/35497879/answer/111241182来源:知乎著作权归作者所有,转载请联系作者获得授权. 序 lara ...
- 再回首,Java温故知新——开篇说明
不知不觉在IT界从业2年了,两年时间足够一个人成长很多,当然也会改变很多事.在这两年时间里,随着对技术的深入了解,知识面的拓展以及工作难度的增大,渐渐的感觉自己技术方面根基不稳,多数问题也只是做到知其 ...
- JAVA基础再回首(二十五)——Lock锁的使用、死锁问题、多线程生产者和消费者、线程池、匿名内部类使用多线程、定时器、面试题
JAVA基础再回首(二十五)--Lock锁的使用.死锁问题.多线程生产者和消费者.线程池.匿名内部类使用多线程.定时器.面试题 版权声明:转载必须注明本文转自程序猿杜鹏程的博客:http://blog ...
- 再回首UML之下篇
接着我们上篇博客再回首UML之上篇说,在类图中有四种关系,关联.依赖.泛化.实现,接下来,我们来看看依赖,依赖--描述的是一种使用关系,她说明一个事物的规格说明的变化可能影响到他使用的另一个事物,反之 ...
- 再回首UML之上篇
UML,统一建模语言,是一种用来对真实世界物体进行建模的标准标记,这个建模的过程是开发面向对象设计方法的第一步,UML不是一种方法学,不需要任何正式的工作产品. UML提供多种类型的模型描述图,当在某 ...
- 谷歌Gmail诞生记:十年回首
美国<时代>周刊网络版今天刊登题为<Gmail诞生记:10年前鲜为人知的故事>(How Gmail Happened: The Inside Story of Its Laun ...
- UML——再回首
概述 在画图的过程中,发现自己还是有好多不懂的地方,对于四大关系理解的不是特别透彻,所以画图的过程中总是"剪不断,理还乱!"再一次整理四大关系,再回首必然丰收~~~ 1.实 ...
- Dubbo 系列(07-2)集群容错 - 服务路由
目录 Dubbo 系列(07-2)集群容错 - 服务路由 1. 背景介绍 1.1 继承体系 1.2 SPI 2. 源码分析 2.1 创建路由规则 2.2 RouteChain 2.3 条件路由 Dub ...
- luogu P6583 回首过去 简单数论变换 简单容斥
LINK:回首过去 考试的时候没推出来 原因:状态真的很差 以及 数论方面的 我甚至连除数分块都给忘了. 手玩几个数据 可以发现 \(\frac{x}{y}\)满足题目中的条件当且仅当 这个是一个既约 ...
- 回首Java——写在前面
我记得在大学的课程要求中,第一个接触的高级编程语言,应该是C语言或者C++等.但是Java应该是我的编程母语,我在高中毕业就接触了Java语言.当时看的是纸质书,具体书名也忘记了.只记得当时第一次接触 ...
随机推荐
- postman发送请求携带Cookie
相关步骤: 1.下载 Postman-Interceptor_v0.2.24.zip插件 2.解压下载好的插件,将其拖到应用配置中 3.复制Postman-Interceptor_v中的id地址 4. ...
- HashMap基本介绍
1.HashMap简介(本文是按照JDK1.8进行解析) HashMap位于JDK自带jar包rt.jar的java.util目录下. HashMap是一个散列表,存储的内容是键值对<key,v ...
- DQN(Deep Q-learning)入门教程(零)之教程介绍
简介 DQN入门系列地址:https://www.cnblogs.com/xiaohuiduan/category/1770037.html 本来呢,在上一个系列数据挖掘入门系列博客中,我是准备写数据 ...
- Redis数据迁移同步工具(redis-shake)
前言 最近线上一台自建redis服务的服务器频繁报警,内存使用率有点高,这是一台配置比较简陋(2C8G)的机子了,近期也打算准备抛弃它了.抛弃之前需对原先的数据进行迁移,全量数据,增量数据都需要考虑, ...
- 【译】OWIN: Open Web Server Interface for .NET
主要是使用 OAuth 时,它运行在 OWIN 上,然后又出了若干问题,总之,发现对 IIS.ASP.NET 和 OWIN 理解一塌糊涂. 后面看到 OWIN: Open Web Server Int ...
- react中路由不起作用的奇怪现象
同样的两段Router代码,为什么一段正常,一段不起作用(也没有任何错误log提示) 瞪着眼观察也看不出为什么... 通过选中高亮显示内容相同, 为何就是有一段路由不管用呢? 折腾半天发现... 大小 ...
- 【C++】表达式中各类数值型数据间的混合运算
注意:以下内容摘自文献[1],修改了部分内容. 1.运算中各类型数据转换方向如下: 高 double ← float ↑ ↑ | long | ↑ | unsig ...
- [Android应用开发] 05.广播和服务
*:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...
- 关于Backus-Naur Form巴克斯诺尔范式和扩展巴克斯范式的知识点和相关词语中英文对照
巴克斯诺尔范式的相关词语中英文对照和知识点 syntax 语法 强调的是编程语言的组形式,例如一个句子中会包含表达式.陈述还有各种单元等等 semantics 语义 强调的是这个编程语言的实际含义,例 ...
- 重学 Java 设计模式:实战单例模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 5个创建型模式的最后一个 在设计模式中按照不同的处理方式共包含三大类:创建型模式.结 ...