题目大意
@skirmish 有 nnn 根绳子,第 iii 根长度为 aia_iai ,他可以把 nnn 根绳子中的每一根绳子剪成若干段,每段长度都必须是同一个正整数 LLL,剩余部分会被丢弃。
@skirmish 希望得到至少 kkk 段长度为 LLL 的绳段,请你求出满足条件的最大的 LLL。无解则输出0。
解法一
求最大值,又不能直接求,上二分答案!
左边界 l←1l\gets1l←1,右边界 r←maxi=1nair\gets\max^{n}_{i=1}a_ir←maxi=1n ai 。
check 函数也就很好写了,求出每一根绳子的段数之和,判断其是否至少为 kkk。
CODE 1
令 m=maxi=1naim=\max^{n}_{i=1}a_im=maxi=1n ai ,则时间复杂度为:O(nlogm)\text O(n\log m)O(nlogm)。
用古诗文形容一下此解法?
> 若止印三二本,未为简易;若印数十百千本,则极为神速。
但官方的数据貌似是三二本(?)。
解法二
不能直接求,那为什么不来暴力枚举呢?
直接从右边界 maxi=1nai\max^{n}_{i=1}a_imaxi=1n ai 向 111 枚举,找到答案就停。
check和上面一样。
CODE 2
令 m=maxi=1naim=\max^{n}_{i=1}a_im=maxi=1n ai ,则时间复杂度为:O(nm)\text O(nm)O(nm)。