【学习笔记】2021.10.4 - 清北学堂模拟赛

T4

题目内容

  • 众所周知,小葱同学擅长计算,尤其擅长计算组合数,但这个题和组合数没什么关系。

  • 杀死一只皮克敏需要\(N\)道工序,由\(N\)个人来完成,第\(i\)个人负责第\(i\)道工序。现在有\(M\)只皮克敏需要杀死,第\(i\)个人完成杀死第\(j\)只皮克敏的第\(i\)道工序需要\(T_{ij}\)的时间(注意,由于\(N\)\(M\)太大了,\(T\)数组以\(T_{ij}=a_i\times b_j\)的形式给出)。为了让皮克敏有更优质的体验,杀死皮克敏的过程是流水线的。第一个人会先对第一只皮克敏执行第一道工序,完成之后将第一只皮克敏交给第二个人进行第二道工序以此类推。问把所有皮克敏杀光需要的时间。

  • 注意:在流水线工作中,每个人同时只能杀死一只皮克敏,并且开始杀死一只皮克敏的过程中不能够停止。所以如果第\(i\)个人完成了杀死当前皮克敏的工作,但第\(i+1\)个人还没有完成杀死上一只皮克敏的工作,这就会导致没有办法连续地杀死当前这只皮克敏,这是不合法的。所以你实际上是要决定每只皮克敏开始被杀死的时间,使得杀死一只皮克敏的过程中不会有中断的时间。

  • 输入:

  • 第一行两个整数\(N,M\)

  • 接下来一行\(N\)个整数代表\(a_i\)

  • 接下来一行\(M\)个整数代表\(b_j\)

正解

  • 每支皮克敏被开始杀死的时间取决于前一只皮克敏的时间

  • 计算开始杀死两只皮克敏时间差(这个好想

  • 设 S\(_i=a_1+…+a_i\)

  • 一只pkm做完前i道工序 -> \(S_i*b_i\)

  • 找出最大的时间差 -> 所有间隔都不会遇到卡顿

  • ∴ -> 求第i-1只pkm做完i-1道工序与第i只做完第i道的时间差

  • \(f(x,y)=\max\limits_{1\leq i \leq n}\) \(s_i*x-s_i*y\),又∵\(s_i=s_(i-1)+a_i\),∴将原式/y再带入,得到一个一次函数的形式

  • \(s_i*x-s_i*y\)变形,\(c_i=s_i*x-s_i-1*y ,s_i=(y/x)s_{i-1}+(c_i/x)\)->直线

  • 对应Y=kx+b,发现 \(c_i\) 是该直线与y轴交点的纵坐标 -> 给定一个斜率,找交点最大的是哪个

代码

无!QWQ

posted @ 2021-10-07 07:53  Binaries  阅读(64)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end