【YY】second

一道很好的EZOI模拟赛的题

忘了原题了……

【题目描述】

有两个集合 X 和 Y , 每个集合中有 n 个正整数元素, 分别为 1 , 2 , .....n.。现在要从这两个集合中各选一个元素, 并要求这两个元素的乘积小于等于 n.

求选这两个元素的方案数.

【数据范围】

对于 30% 的数据,n<=500.

对于 50% 的数据,n<=5000.

对于 70% 的数据,n<=10^6.

对于 100% 的数据,n<=10^10; T<=300

思路:

首先想到的思路显然是O(T n^2),显然不行

手算想一想发现O(T n)做法,即 ans= n / 1 + n / 2 + .......+ n / n-1 + n / n

但其实这个是过不了70%数据的,、

再想一下发现后 n / 2 个都是1,所以复杂度变成:O(T n/2),勉勉强强能过70%

对于100%的数据,

听说是一种叫数论分块的东西,不大会……还是说说我自己的思路:

推一会发现一些性质:

1.方案数只有√n z种不同

2.对于前tmp个数,第 i 个数的方案数-第 i+1个方案数 就是在√n 之后的,方案数为 i 的个数

3.tmp的定义:如果 √n * √n(都是向下取整后的)> n - √n,则tmp=√n -1;否则为 √n

数:       1  2  3  4  5  6  7  8  9  10 11 12 13 14 15

方案数:15  7  5  3  3  2  2  1  1  1   1   1   1   1   1

所以可以通过tmp次循环,累计 n / i 的同时算出对应的 tmp之后的方案数

这样我们就得到了O(T √n)的做法

但是还有一个更神的!!(sts树套树大爷%%%%%)

我们发现方案数 y 和数 x 成反比例(画个图)

所以乘积<=n的方案数,实际上是(以x为横轴,y为纵轴,第一象限)反比例图像下方,1--n 范围内整点的个数,就是面积

反比例图像上的每个点都为n

从1 循环到 √n,每次sum累计 n / i ,这样得到的就是1--√n的面积,

之后sum*2-√n*√n,得解

(sts树套树大爷%%%%%)

时间: 2024-10-24 22:08:46

【YY】second的相关文章

2018 Multi-University Training Contest 4 Problem L. Graph Theory Homework 【YY】

传送门:http://acm.hdu.edu.cn/showproblem.php?pid=6343 Problem L. Graph Theory Homework Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 1536    Accepted Submission(s): 830 Problem Description Ther

C 六学家的困惑 【YY】 (2019年华南理工大学程序设计竞赛(春季赛))

冲鸭,去刷题:https://ac.nowcoder.com/acm/contest/625/C 小六喜欢两全其美的事情,今天就正好有一个这样的机会. 小六面前有两根管子,管子里面放满了数字为1到9的小球.每次取球时,小六会先选择一根管子,再从这根管子的某一侧(左侧或右侧)取出一个球.在满足取球规则的情况下,他可以任意顺序取出所有小球.假如小六依次取出的球的编号为a1,a2,?,ana1,a2,?,an,则他最后就得到了一个形如¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯a1a2?ana1a

YY .Net core【00】相关博客汇总

系列教程 [01]ASP .NET Core 中文文档 @.NETCore中国学习小组 [02]ASP.NET Core框架揭秘 @Artech [03]无私分享:ASP.NET CORE 项目实战 @果冻布丁喜之郎 [04].Net Core 系列 @张善友 [?]待续 精品文章 [?]待续 本文将持续YY好的 .NET CORE 相关教程和文章,欢迎大家收藏YY,也欢迎大家推荐的教程和文章.

【BZOJ2820】YY的GCD(莫比乌斯反演)

[BZOJ2820]YY的GCD(莫比乌斯反演) 题面 讨厌权限题!!!提供洛谷题面 题解 单次询问\(O(n)\)是做过的一模一样的题目 但是现在很显然不行了, 于是继续推 \[ans=\sum_{d=1}^n[d\_is\_prime]\sum_{i=1}^{n/d}[\frac{n}{id}][\frac{m}{id}]\] 老套路了 令\(T=id\) \[ans=\sum_{T=1}^{n}[\frac{n}{T}][\frac{m}{T}]\sum_{d|T}[d\_is\_prim

【BZOJ4942】[Noi2017]整数 线段树+DFS(卡过)

[BZOJ4942][Noi2017]整数 题目描述去uoj 题解:如果只有加法,那么直接暴力即可...(因为1的数量最多nlogn个) 先考虑加法,比较显然的做法就是将A二进制分解成log位,然后依次更新这log位,如果最高位依然有进位,那么找到最高位后面的第一个0,将中间的所有1变成0,那个0变成1.这个显然要用到线段树,但是复杂度是nlog2n的,肯定过不去. 于是我在考场上yy了一下,这log位是连续的,我们每次都要花费log的时间去修改一个岂不是很浪费?我们可以先在线段树上找到这段区间

【BZOJ3232】圈地游戏 分数规划+最小割

[BZOJ3232]圈地游戏 Description DZY家的后院有一块地,由N行M列的方格组成,格子内种的菜有一定的价值,并且每一条单位长度的格线有一定的费用. DZY喜欢在地里散步.他总是从任意一个格点出发,沿着格线行走直到回到出发点,且在行走途中不允许与已走过的路线有任何相交或触碰(出发点除外).记这条封闭路线内部的格子总价值为V,路线上的费用总和为C,DZY想知道V/C的最大值是多少. Input 第一行为两个正整数n,m. 接下来n行,每行m个非负整数,表示对应格子的价值. 接下来n

【CODEVS】1922 骑士共存问题

[算法]二分图最大匹配(最大流) [题解]按(i+j)奇偶性染色后,发现棋子跳到的地方刚好异色. 然后就是二分图了,对于每个奇点向可以跳到的地方连边,偶点不需连(可逆). 所以题目要求转换为求二分图上最大独立集(对于每条边,至少有一个点不被选中). 最大独立集=总点数-最小割 //代码略 //hzwer's code: #include<iostream> #include<cstdio> #include<cstring> #define INF 0x7fffffff

【类库】私房干货.Net数据层方法的封装

[类库]私房干货.Net数据层方法的封装 作者:白宁超 时间:2016年3月5日22:51:47 摘要:继上篇<Oracle手边常用70则脚本知识汇总>文章的发表,引起很多朋友关注.便促使笔者收集整理此文.本文主要针是对微软技术对数据库(下文案例采用的)操作时,调用执行方法的封装,这也是数年逐渐学习.吸收.实践.完成的一个类库.其中不免有不合理之处,亦或是不符合个别读者的使用习惯.在此,共享此文,权当互相学习.(本文原创,转载注明出处:私房干货.Net数据层方法的封装) 1 概述 本文分以下几

【bfs】【中等难度】tyvj P1234 - bench与奔驰

P1234 - bench与奔驰 From zhangbh001    Normal (OI) 总时限:10s    内存限制:128MB    代码长度 限制:64KB P1234 - bench与奔驰 背景 Background 公园里有个人在练开奔驰 - -!,但是总是撞在bench上 (众人曰:狼来了,快跑啊!) 描述 Description 公园里的bench与奔驰都是无敌的,不会被撞坏.由于开奔驰的人比较"有特点",总是向上下左右四个方向开,而且只会在撞到椅子之后改变方向(