AtCoder ABC 165 D - Floor Function (Good, 手动模拟推出公式)
题目链接:Here
题意:
给出正整数 \(A,B,N (1\le A\le 1e6,1\le B,N\le1e12)\) ,对于 \(x\in [0,N]\) 求出
- \(\left\lfloor\frac{A x}{B}\right\rfloor-A \times\left\lfloor\frac{x}{B}\right\rfloor\)
的最大值
\]
全搜索的话 \(\mathcal{O}(n)\) 的时间复杂度是肯定不行的,直接看过去公式应该能够化简,
如果不是 \(floor\) (向下取整) ,而是实数运算的话, \(\frac{Ax}B - \frac{Ax}B = 0\) 就恒成立了
大概如上思考的话,总觉得为了使 \(x\) 这个值更大,原公式后面部分的 \(\left\lfloor\frac{x}{B}\right\rfloor\) 应该尽可能的靠近向上取整得到的整数,即尽可能得到 \((.999999)\) 这样的答案,此时差值就变大起来了
实际模拟一下
样例一:\(A=5,B=7,N=4\)
| \(x\) | \(\left\lfloor\frac{A x}{B}\right\rfloor\) | \(A \times\left\lfloor\frac{x}{B}\right\rfloor\) | 差值 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 0 |
| 2 | 1 | 0 | 1 |
| 3 | 2 | 0 | 2 |
| 4 | 2 | 0 | 2 |
| 5 | 3 | 0 | 3 |
| 6 | 4 | 0 | 4 |
| 7 | 5 | 5 | 0 |
| 8 | 5 | 5 | 0 |
| 9 | 6 | 5 | 1 |
| 10 | 7 | 5 | 2 |
| 11 | 7 | 5 | 2 |
| 12 | 8 | 5 | 3 |
| 13 | 9 | 5 | 4 |
而且要注意的是:
- \(A \times\left\lfloor\frac{x}{B}\right\rfloor\) 是周期的增加,\(B(=7),A(=5)\)
同理:\(\left\lfloor\frac{A x}{B}\right\rfloor\) 也是一样的
\(f(x) = \left\lfloor\frac{A x}{B}\right\rfloor-A \times\left\lfloor\frac{x}{B}\right\rfloor\) 的取值对于 \(B\) 来说是周期性的,所以 \(x\) 的取值
- \(x=0,1,2,...,B-1\)
考虑这么多即可
在 \(x = 0,1,2,...,B-1\) 的范围中
- \(\left\lfloor\frac{A x}{B}\right\rfloor\) 单调递增
- \(A \times\left\lfloor\frac{x}{B}\right\rfloor\) 保持不变
- 那么 \(f(x)\) 单调性也就是同 \(\left\lfloor\frac{A x}{B}\right\rfloor\) 一样单调递增了
换句话说,只要满足
- \(x=0,1,...,B-1\)
- \(x\le N\)
的话符合条件的最大 \(x\) 应该是 \(x=\min(N,B-1)\)
那么最后答案输出 $ \frac AB\times \min(N,B-1)$ 即可
时间复杂度由全搜索的 \(\mathcal{O}(n) \to \mathcal{O}(1)\)
ll a, b, n;
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
cin >> a >> b >> n;
cout << a * min(n, b - 1) / b;
}
AtCoder ABC 165 D - Floor Function (Good, 手动模拟推出公式)的更多相关文章
- ATCODER ABC 099
ATCODER ABC 099 记录一下自己第一场AK的比赛吧...虽然还是被各种踩... 只能说ABC确实是比较容易. A 题目大意 给你一个数(1~1999),让你判断它是不是大于999. Sol ...
- 在JS中关于堆与栈的认识function abc(a){ a=100; } function abc2(arr){ arr[0]=0; }
平常我们的印象中堆与栈就是两种数据结构,栈就是先进后出:堆就是先进先出.下面我就常见的例子做分析: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main( ...
- Atcoder ABC 141
Atcoder ABC 141 A - Weather Prediction SB题啊,不讲. #include<iostream> #include<cstdio> #inc ...
- Atcoder ABC 139E
Atcoder ABC 139E 题意: n支球队大循环赛,每支队伍一天只能打一场,求最少几天能打完. 解法: 考虑抽象图论模型,既然一天只能打一场,那么就把每一支球队和它需要交手的球队连边. 求出拓 ...
- Atcoder ABC 139D
Atcoder ABC 139D 解法: 等差数列求和公式,记得开 $ long long $ CODE: #include<iostream> #include<cstdio> ...
- Atcoder ABC 139C
Atcoder ABC 139C 题意: 有 $ n $ 个正方形,选择一个起始位置,使得从这个位置向右的小于等于这个正方形的高度的数量最多. 解法: 简单递推. CODE: #include< ...
- Atcoder ABC 139B
Atcoder ABC 139B 题意: 一开始有1个插口,你的插排有 $ a $ 个插口,你需要 $ b $ 个插口,问你最少需要多少个插排. 解法: 暴力模拟. CODE: #include< ...
- Atcoder ABC 139A
Atcoder ABC 139A 题意: 给你两个字符串,记录对应位置字符相同的个数 $ (n=3) $ 解法: 暴力枚举. CODE: #include<iostream> #inclu ...
- atcoder abc 244
atcoder abc 244 D - swap hats 给定两个 R,G,B 的排列 进行刚好 \(10^{18}\) 次操作,每一次选择两个交换 问最后能否相同 刚好 \(10^{18}\) 次 ...
- AtCoder ABC 250 总结
AtCoder ABC 250 总结 总体 连续若干次一样的结果:30min 切前 4 题,剩下卡在 T5 这几次卡在 T5 都是一次比一次接近, 什么 dp 前缀和打挂,精度被卡,能水过的题连水法都 ...
随机推荐
- Python读取Ansible playbooks返回信息
一.背景及概要设计 当公司管理维护的服务器到达一定规模后,就必然借助远程自动化运维工具,而ansible是其中备选之一.Ansible基于Python开发,集合了众多运维工具(puppet.chef. ...
- [AI]重新审视“幻肢”现象背后的意识机制
"幻肢"实验 "幻肢"实验是研究幻肢现象的经典实验方法.实验对象通常选择已经失去一肢如手或脚的病人.实验主要步骤是:首先安装一台镜头对残肢部位进行实时视频监测. ...
- IIS安装与配置
一.环境介绍 Windows Server 2019 64位 标准版 二.IIS安装 2.1.打开服务器管理器,单击添加角色和功能 在Windows Server 2019 服务器管理中,点击角色和功 ...
- .NET使用分布式网络爬虫框架DotnetSpider快速开发爬虫功能
前言 前段时间有同学在微信群里提问,要使用.NET开发一个简单的爬虫功能但是没有做过无从下手.今天给大家推荐一个轻量.灵活.高性能.跨平台的分布式网络爬虫框架(可以帮助 .NET 工程师快速的完成爬虫 ...
- 快速入门:使用 .NET Aspire 组件实现缓存
前言 云原生应用程序通常需要各种类型的可扩展缓存解决方案来提高性能..NET Aspire 组件简化了连接到流行的缓存服务(例如 Redis)的过程,今天小编就为大家简单介绍一下如何使用 .NET A ...
- springboot——入门案例
真简单啊 springboot 学了入门案例,有感而发 首先是一个自带的配置文件: package com.example.springboot_01; import org.springframew ...
- 【scikit-learn基础】--『预处理』之 分类编码
数据的预处理是数据分析,或者机器学习训练前的重要步骤.通过数据预处理,可以 提高数据质量,处理数据的缺失值.异常值和重复值等问题,增加数据的准确性和可靠性 整合不同数据,数据的来源和结构可能多种多样, ...
- Java8函数式编程应用
我们经常提到,Java8是革命性的一个版本,原因就是正式引入了函数式编程,那Java的函数式编程在实际应用中到底有什么用呢?结合实际的应用,我整理出了函数式在Java的几个经典用途. 缓求值 惰性求值 ...
- 使用cgroup控制CPU使用率
关键文件 cpu子系统中的关键文件. cpu.cfs_period_us cpu.cfs_quota_us tasks cgroup.procs 常用命令 查看当前系统内的CPU. lscpu 查看当 ...
- Python脚本猜解网站登录密码(带token验证)
目录: 关键代码解释 设置请求头 get_token函数获取token值 完整代码: 运行结果: 上一篇文章:一个简单的Python暴力破解网站登录密码脚本 测试靶机为Pikachu漏洞练习平台暴力破 ...