题目链接: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\)

的最大值


\[QAQ
\]

全搜索的话 \(\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, 手动模拟推出公式)的更多相关文章

  1. ATCODER ABC 099

    ATCODER ABC 099 记录一下自己第一场AK的比赛吧...虽然还是被各种踩... 只能说ABC确实是比较容易. A 题目大意 给你一个数(1~1999),让你判断它是不是大于999. Sol ...

  2. 在JS中关于堆与栈的认识function abc(a){ a=100; } function abc2(arr){ arr[0]=0; }

    平常我们的印象中堆与栈就是两种数据结构,栈就是先进后出:堆就是先进先出.下面我就常见的例子做分析: main.cpp int a = 0; 全局初始化区 char *p1; 全局未初始化区 main( ...

  3. Atcoder ABC 141

    Atcoder ABC 141 A - Weather Prediction SB题啊,不讲. #include<iostream> #include<cstdio> #inc ...

  4. Atcoder ABC 139E

    Atcoder ABC 139E 题意: n支球队大循环赛,每支队伍一天只能打一场,求最少几天能打完. 解法: 考虑抽象图论模型,既然一天只能打一场,那么就把每一支球队和它需要交手的球队连边. 求出拓 ...

  5. Atcoder ABC 139D

    Atcoder ABC 139D 解法: 等差数列求和公式,记得开 $ long long $ CODE: #include<iostream> #include<cstdio> ...

  6. Atcoder ABC 139C

    Atcoder ABC 139C 题意: 有 $ n $ 个正方形,选择一个起始位置,使得从这个位置向右的小于等于这个正方形的高度的数量最多. 解法: 简单递推. CODE: #include< ...

  7. Atcoder ABC 139B

    Atcoder ABC 139B 题意: 一开始有1个插口,你的插排有 $ a $ 个插口,你需要 $ b $ 个插口,问你最少需要多少个插排. 解法: 暴力模拟. CODE: #include< ...

  8. Atcoder ABC 139A

    Atcoder ABC 139A 题意: 给你两个字符串,记录对应位置字符相同的个数 $ (n=3) $ 解法: 暴力枚举. CODE: #include<iostream> #inclu ...

  9. atcoder abc 244

    atcoder abc 244 D - swap hats 给定两个 R,G,B 的排列 进行刚好 \(10^{18}\) 次操作,每一次选择两个交换 问最后能否相同 刚好 \(10^{18}\) 次 ...

  10. AtCoder ABC 250 总结

    AtCoder ABC 250 总结 总体 连续若干次一样的结果:30min 切前 4 题,剩下卡在 T5 这几次卡在 T5 都是一次比一次接近, 什么 dp 前缀和打挂,精度被卡,能水过的题连水法都 ...

随机推荐

  1. 视觉差缓动效果的轮播--React版

    React实现视觉差效果缓动轮播 效果如下(图片帧率低看起来有点卡顿,看个大概就行): 分享一下思路: 1.正常引入一个轮播组件(站在巨人肩膀省时省力),去除指示点.引导箭头等不需要的元素,有些组件支 ...

  2. uni-app小程序项目发布流程

    uni-app小程序项目发布流程开发工具:HbuilderX编辑器.微信小程序开发工具1.小程序开发工具就可以点击发行版本了 2.登录开发者平台配置域名白名单 在开发者设置里完成服务器域名配置(域名白 ...

  3. 有一种浪漫,叫接触Linux

    ​大家好,我是五月. 嵌入式开发 嵌入式开发产品必须依赖硬件和软件. 硬件一般使用51单片机,STM32.ARM,做成的产品以平板,手机,智能机器人,智能小车居多. 软件用的当然是以linux系统为蓝 ...

  4. javaweb项目搭建|前端项目【包含增删改查,mysql】二

    首先,新建一个javaweb项目[前提已经下载tomcat,mysql,此实验idea版本为2022,其他版本可能位置不一样] File->New->Project 起一个项目名称(随便起 ...

  5. 《最新出炉》系列初窥篇-Python+Playwright自动化测试-35-处理web页面定位toast-上篇

    1.简介 在使用appium写app自动化的时候介绍toast的相关元素的定位,在Web UI测试过程中,也经常遇到一些toast(出现之后一闪而过,不留下一点点痕迹),那么这个toast我们这边如何 ...

  6. 【UniApp】-uni-app概述

    前言 好,经过我们前面文章的编写,大家可以了解到微信小程序开发相关的知识,了解完了这个微信小程序开发和云开发之后,从这篇文章开始,我再来给大家写一下关于 Uniapp 的知识. 好,开始,那什么是 U ...

  7. [python][图像切割]给定手写数字图片完成数字切割

    import torch import torch.nn as nn from torchvision import transforms from PIL import Image, ImageOp ...

  8. 阿里云+智能ai+gpt

    1.阿里 百度 腾讯分词 知识库.     阿里云(项目具体的费用预算展示,实际功能核算.) 向量智库 https://developer.aliyun.com/article/1234278?spm ...

  9. 用JS实现简单的屏幕录像机

    本文将介绍如何用JS实现简单的屏幕录像机. 一.录制准备 创建一个按钮 <button id="recording-toggle">Start recording< ...

  10. 前端异步编程 —— Promise对象

    在前端编程中,处理一些简短.快速的操作,在主线程中就可以完成. 但是,在处理一些耗时比较长以至于比较明显的事情,比如读取一个大文件或者发出一个网络请求,就需要异步编程来实现,以避免只用主线程时造成页面 ...