事先声明

此题解为一篇洛谷题解的详细补充这里(我才不告诉你我这道题想了好久)

题目大意

有 \(n\) 个任务,记作 \(t\) 数组,由于主人公很懒,所以他每天都要睡觉,每一天都有 \(x\) 小时。

前 \(i\) 天睡觉的下限为 \(r \cdot x \cdot i\) ,其中 \(r\) 为给定实数。

求至少需要多少天才能完成任务。

分析(你以为你打的是暴力,其实是正解)

考虑一种暴力做法,即模拟。

每天考虑不同的任务,能做就做,不能做则睡觉。(算贪心吗?)

question1: \(t\) 数组要排序嘛?

  • 面对这个问题,我们从一般角度来看都是解不出来的,所以我们考虑转换思路

  • 我们从全局考虑这个问题

  • 因为 \(\sum_{i=1}^{n} t_i\) 是恒定的,所以每一天都是独立的,也就是两天之间没有联系。

  • 又因为 \(\sum_{i=1}r\cdot x \cdot i\) 也是恒定的。

  • 所以总时间=睡觉的时间+工作的时间是恒定的。

  • 所以 \(t\) 数组的顺序没有强制要求。

然后代码就出来了。

可以发现会被卡掉(别问为什么),所以考虑优化。

优化?

容易发现,如果每天都可以做任务的话,时间复杂度就为 \(O(n)\) 远远够得,所以不可能会被卡

发现了什么?

有些天他整天睡觉的

而这些天都算进了我们的循环,太浪费了,我们考虑把这些天过滤掉,这样时间复杂度就为线性了!

假设当前面对的是 \(tot\) 个任务,即 \(t_{tot}\) ,目前总睡觉时间为 \(sl\) ,现在是第 \(j\) 天。

那么当 \(x-a_{tot}+sl<m \cdot j \cdot \frac{p}{q}\) ,这一天肯定做不了任务了,所以我们让他睡觉。

假设要睡 \(i\) 天觉 那么有 \(m - a_{tot} + sl + i \cdot m \ge m \cdot(i+j) \cdot \frac{p}{q}\)

简单移项可以得到 \(i \ge \cfrac{j \cdot m \cdot p - q \cdot (m - a_{tot})+sl}{m\cdot(q-p)}\)

取等号最小,所以 \(i =\left \lceil \cfrac{j \cdot m \cdot p - q \cdot (m - a_{tot})+sl}{m\cdot(q-p)} \right \rceil\) ,其中 \(\left \lceil \right \rceil\) ,为向上取整。

question2:向上取整怎么计算

  • 虽然c++有向上取整的函数,但是假设我们不知道,但是我们知道, \(int\) 会自动向下取整,那么,有什么方式可以让向上取整和向下取整相互转换吗?

  • 答案是有的,有个公式: \(\left \lceil \cfrac{x}{y} \right \rceil = \left \lfloor \cfrac{x+y-1}{y} \right \rfloor\)

  • 怎么证明呢?

  • 我们分类讨论。

  1. 我们设 \(y | x\) ,则我们可以设 \(x=ky(k \in \mathbb{Z})\) ,则我们只需证 \(\left \lceil k \right \rceil = \left \lfloor k+1-1 \right \rfloor\) ,明显成立。
  2. 我们设 \(x=ky+p(k,p \in \mathbb{Z})\) , \(p \in (1,y-1]\) , 则我们只需证 \(\left \lceil k+\cfrac{p}{y} \right \rceil = \left \lfloor k+1+\cfrac{p}{y}-\cfrac{1}{y} \right \rfloor\) ,又因为 \(p<y\) ,则原式 \(k+1=k+1\) ,显然成立。

    于是,这道题就做完了,这里配上代码

Code

#include<bits/stdc++.h>

using namespace std;

#define int long long 

const int MAXN = 1e5 + 7;

int n, x, p, q, t[MAXN];

signed main() {
ios::sync_with_stdio(false);
cin.tie(NULL);//cin的加速 cin >> n >> x >> p >> q;
for (int i = 1; i <= n; i ++) cin >> t[i]; int tot = 1, sl = 0;
for (int j = 1; ; j ++) {
if ((x - t[tot] + sl) * q < x * p * j) {//需要睡觉
int i = (x * p * j - (x - t[tot] + sl) * q + (x * (q - p)) - 1) / (x * (q - p));//我们推出来的式子
j += i, sl += i * x;//加上去
}
int ans = x;//ans:睡觉时间,一开始全天都要睡觉
while (true) {
if (tot > n) break;//做完了
if (ans <= t[tot]) break;//不够做
if ((ans - t[tot] + sl) * q < x * p * j) break;//不够做
ans -= t[tot], tot++;//睡觉时间减掉,tot++
}
sl += ans;//睡觉时间加上ans
if (tot > n) {
cout << j << endl;//输出
break;
}
}
return chen_zhe;
}

完结撒花✿✿ヽ(°▽°)ノ✿

洛谷P8508 做不完的作业【题解】的更多相关文章

  1. 洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心)

    洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/132 ...

  2. 洛谷 P2253 好一个一中腰鼓! 题解

    P2253 好一个一中腰鼓! 题目背景 话说我大一中的运动会就要来了,据本班同学剧透(其实早就知道了),我萌萌的初二年将要表演腰鼓[喷],这个无厘头的题目便由此而来. Ivan乱入:"忽一人 ...

  3. 洛谷 P2949 [USACO09OPEN]工作调度Work Scheduling 题解

    P2949 [USACO09OPEN]工作调度Work Scheduling 题目描述 Farmer John has so very many jobs to do! In order to run ...

  4. 洛谷P5664 Emiya 家今天的饭 题解 动态规划

    首先来看一道题题: 安娜写宋词 题目背景 洛谷P5664 Emiya 家今天的饭[民间数据] 的简化版本. 题目描述 安娜准备去参加宋词大赛,她一共掌握 \(n\) 个 词牌名 ,并且她的宋词总共有 ...

  5. 洛谷【P5004 专心OI - 跳房子】 题解

    题目链接 https://www.luogu.org/problem/P5004 洛谷 P5004 专心OI - 跳房子 Imakf有一天参加了PINO 2017 PJ组,他突然看见最后一道题 他十分 ...

  6. 洛谷P3387 【模板】缩点 题解

    背景 今天\(loj\)挂了,于是就有了闲情雅致来刷\(luogu\) 题面 洛谷P3387 [模板]缩点传送门 题意 给定一个\(n\)个点\(m\)条边有向图,每个点有一个权值,求一条路径,使路径 ...

  7. [NOI导刊2010提高&洛谷P1774]最接近神的人 题解(树状数组求逆序对)

    [NOI导刊2010提高&洛谷P1774]最接近神的人 Description 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某 ...

  8. [洛谷P1029]最大公约数与最小公倍数问题 题解(辗转相除法求GCD)

    [洛谷P1029]最大公约数与最小公倍数问题 Description 输入二个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P, ...

  9. BZOJ5288 & 洛谷4436 & LOJ2508:[HNOI/AHOI2018]游戏——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5288 https://www.luogu.org/problemnew/show/P4436 ht ...

  10. BZOJ4943 & 洛谷3823 & UOJ315:[NOI2017]蚯蚓排队——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4943 http://uoj.ac/problem/315 https://www.luogu.or ...

随机推荐

  1. HTML基础知识(1)常用标签的使用 h、p、img、meta、a、iframe...

    文章目录 1.html简介 2.html注释 3.标签的属性 3.1 代码 3.2 测试结果 4.常用的标签 4.1 代码 4.2 测试结果 5.实体 5.1 代码 5.2 测试结果 6.图片引入 6 ...

  2. 2022年最新编辑Linux基础知识总结

    文章目录 1.Linux的目录结构 2.远程操作Linux和上传文件到Linux 3.文本编辑 4.快捷键 5.登录.注销.关机.重启 6.用户管理 6.1 .新用户注册 6.2.使用新用户登录 6. ...

  3. PMM实现监控Mysql-MGR

    一.docker安装PMM服务端 1.安装yum配置单元 # 如果已安装,略过此步 yum install -y yum-utils #yum配置单元 2.配置docker阿里云yum源 #配置doc ...

  4. Mysql+Mycat+NFS+Rsync+LVS+DNS+IPtables综合实验

    1.环境准备 服务器 IP地址 作用 系统版本 Mysql-master eth0:10.0.0.58 主数据库 Rocky8.6 Mysql-slave1 eth0:10.0.0.68 备数据库 R ...

  5. Anaconda环境搭配(Ipython)-获得jupyter notebook(适用Win10)

    关于如何下载anaconda并获得jupyter notebook的随笔. 首先下载anaconda,然后下载完成后,如果是win10系统,则通过下图的放大镜搜索Jupyter Notebook 会有 ...

  6. 修改egg.js项目的默认favicon图标

    在项目根目录下的config/config.default.js文件中配置 将 .ico的图标放在一个目录中 方法一.读取本地文件 const path = require('path'); cons ...

  7. 核磁共振成像学习笔记——从FID信号到K空间

    在理想磁场环境下(没有不存在场不均匀性),对于一个没有梯度场的方块. 此时,RF pulse的两路正交信号(相位差为90°)对此方块进行激发,然后收取信号,我们可以得到由此方块产生的FID信号. 设此 ...

  8. C#winform使用NOPI读取Excel读取图片

    需求:在Winform使用NOPI做导入时候,需要导入数据的同时导入图片. 虽然代码方面不适用(我好像也没仔细看过代码),但是感谢大佬给了灵感http://www.wjhsh.net/IT-Ramon ...

  9. vue 中使用 this 更新数据的一次大坑

    情景说明: 之前用 vue 做数据绑定更新时,发现一个莫名奇妙的问题. 我在 vue 实例中声明了一个数组属性如 books: [],在异步请求的回调函数中使用 this.books = res.da ...

  10. 第2-4-3章 规则引擎Drools基础语法-业务规则管理系统-组件化-中台

    目录 4. Drools基础语法 4.1 规则文件构成 4.2 规则体语法结构 4.3 注释 4.4 Pattern模式匹配 4.5 比较操作符 4.5.1 语法 4.5.2 操作步骤 4.6 执行指 ...