Codeforces Round #701 (Div. 2) C. Floor and Mod 数学分块
传送门
题意: 给两个数x,yx,yx,y。现在你计算有多少对a(a<=x)a(a<=x)a(a<=x)和b(b<=y)b(b<=y)b(b<=y)使得⌊ab⌋=amodb\left \lfloor \frac{a}{b} \right \rfloor=a\bmod b⌊ba⌋=amodb。
思路: 因为xxx和yyy都是1e91e91e9的范围,可以想到n\sqrt{n}n求出答案。我们令⌊ab⌋=amodb=k\left \lfloor \frac{a}{b} \right \rfloor=a\bmod b=k⌊ba⌋=amodb=k,那么aaa可以写成k∗b+kk*b+kk∗b+k,又因为k<bk<bk<b,那么k∗k<=k∗b+k=a<=xk*k<=k*b+k=a<=xk∗k<=k∗b+k=a<=x,可得k<=xk<=\sqrt{x}k<=x,现在考虑知道了kkk能否算出答案呢?考虑如下三个个不等式:{1<=b<=y1<=k∗b+k<=xk<b\begin{cases} 1<=b<=y\\ 1<=k*b+k<=x\\ k<b \end{cases}⎩⎪⎨⎪⎧1<=b<=y1<=k∗b+k<=xk<b
解得:k<b<=min(y,x/k−1)k<b<=min(y,x/k-1)k<b<=min(y,x/k−1)
我们枚举kkk就可以得到答案啦。
//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int x,y;int main()
{// ios::sync_with_stdio(false);
// cin.tie(0);int _; scanf("%d",&_);while(_--){LL ans=0;scanf("%d%d",&x,&y);for(LL k=1;k*k<x;k++) ans+=max(0ll,min(1ll*x/k-1,1ll*y)-k);printf("%lld\n",ans);}return 0;
}
/**/
Codeforces Round #701 (Div. 2) C. Floor and Mod 数学分块相关推荐
- Codeforces Round #701 (Div. 2) A ~ F ,6题全,超高质量良心题解【每日亿题】2021/2/13
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Add and Divide B - Replace and Keep Sorted C ...
- Codeforces Round #701 (Div. 2)赛后补题报告(A~D)
Codeforces Round #701 (Div. 2)赛后补题报告(A~D) A. Add and Divide 原题信息 http://codeforces.com/contest/1485/ ...
- Codeforces Round #740 (Div. 2) D2. Up the Strip dp + 分块优化 + 逆向思维
传送门 文章目录 题意: 思路 题意: 有nnn个细胞,你初始在第nnn细胞上,假设你当前在xxx处,你每次可以进行如下两个操作: (1)(1)(1)选择[1,x−1][1,x-1][1,x−1]内一 ...
- Codeforces Round #701 (Div. 2)小结
2023大厂真题提交网址(含题解): www.CodeFun2000.com(http://101.43.147.120/) 最近我们一直在将收集到的机试真题制作数据并搬运到自己的OJ上,供大家免费练 ...
- Codeforces Round #701 (Div. 2)
A Add and Divide 题意:给你两个正整数a和b,每次操作可以将a改为a/b向下取整,或让b=b+1,求让a=0时的最小操作数. 思路:显然b=1时,必须先进行b=b+1.先求一直进行a= ...
- Codeforces Round #701 (Div. 2) E. Move and Swap 思维 + dp
传送门 文章目录 题意: 思路: 题意: 思路: 由于是按层来的,所以我们肯定先按照层来分组. 定义dp[i]dp[i]dp[i]为红棋在位置iii的时候的最大得分和. 先考虑不换的情况,我们对于每个 ...
- Codeforces Round #701 (Div. 2) D. Multiples and Power Differences 思维构造
传送门 题意: 给定一个矩阵aaa,让你构造一个矩阵bbb,要求矩阵bbb的每个元素是aaa对应位置元素的倍数,且矩阵bbb的每两个相邻元素相差为k4(k>=1)k^4(k>=1)k4(k ...
- Codeforces Round #701 (Div. 2) 总结
其实Round699也有打的,但是总结变成鸽子飞走了. 赛前30min:睡觉真舒服. 开场一个A题,看了个题感觉这玩意好像不能直接算. 目测答案肯定小于100,log1e18才64不到. 那就枚举给b ...
- [Codeforces Round #194 (Div. 2)] Secret 解题报告 (数学)
题目链接:http://codeforces.com/problemset/problem/334/C 题目: 题目大意: 给定数字n,要求构建一个数列使得数列的每一个元素的值都是3的次方,数列之和S ...
最新文章
- 使用纯C++实现SQL Server2005 数据库读写操作详细步骤
- 某内存池中的指针用法
- matplotlib将图绘制在多福图中
- AI岗位面试屡战屡败?这份“翻盘秘籍”快收好!
- python报错:UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe0 in position 0: ordinal not in rang
- Android 获取外网IP,实测有效
- 《软件需求最佳实践》阅读笔记01
- 排序算法02--冒泡排序
- [收藏]上班族的真实写照
- 2017CCPC秦皇岛 L题One-Dimensional MazeZOJ3992【模拟】
- FFmpeg 和 MP4Box 几个命令
- MAXHUB会议平板的无线投屏怎么用?
- 据当前时间获取本学期周次
- fifo的rdata_异步FIFO设计与实现
- Windows Server 2016修改计算机名
- echarts饼图设置每个扇形的颜色
- Http协议和抓包工具
- 计算机教案在幻灯片中插入影片,小学六年级上册《在作品中插入“电影”片段》信息技术教案...
- 社交网络:有意义的不仅是邓巴数
- Kite的学习历程之SpringCloud之Rest微服务构建之微服务提供者支付Moudle
热门文章
- linux+arch系统下载,Linux
- 如何计算一只鸡的表面积?各大专业的奇葩解法
- 《SAS编程与数据挖掘商业案例》学习笔记之十九
- adb android源码分析,Android源码分析(十六)----adb shell 命令进行OTA升级
- ensp查看历史配置命令_华为eNSP常用命令
- opencv计算两数组的乘积_#剑指Offer#12. 构建乘积数组
- java file_java开发之File类详细使用方法介绍
- Java连续获取两个输入,java 获取控制台的输入的两个方法
- c++STL中的find()函数 有两种使用方法
- C++实现邻接表存储的图及bfs遍历