sicily 2015 A New Year Gift
2015-11-10 19:25
387 查看
二分答案
题意:
有n种珍珠,每种珍珠i有ai颗.
一条链子由m颗不同种的珍珠组成.
给出n,m,数组a.问最多能合成多少条链子
数据范围:
n<=1000,ai<=2000,m<=100
思路:
暴力的方法也不简单啊.这里的珍珠优先度是先用数量最多的m颗珍珠,而且合成一条链子之后要重新选择最多的m颗,因此暴力的复杂度是O(mk),k是能合成的链子数.显然这链子数要到几十w不是问题,加上m大一点,就超时了
正确的做法是二分答案,而且二分判定感觉是一个非常经典的东西.我们原来的问题是m颗珍珠1条链子,问最多多少条链子,现在问题变成我要合成k条链子,问最多每条链子有几颗.显然,如果最多颗数>m,那就返回true了
原问题有一个关键的地方就是每条链不能有同种珍珠,因此我们不能一次把一种珍珠用完.而在二分判定里,由于问题变成了要合成k条链子,因此我们可以把同种珍珠往每条链子里塞珍珠.若果一种珍珠的数量ai>k,那么这种珍珠就只有k颗能用上,不然就会在某条链子上有重复的珍珠了.而若果ai<k,那么我们直接用完ai颗.注意这里的ai颗并不一定填在所有链子的同一个位置,你当它是按照蛇形来填珍珠就好了.
求出一个用了的珍珠数sum,如果sum>=k*m,那么说明填k条链子,出来的链子长度比m要大,ok!然后main函数就是不断二分这个链子数
总结:二分答案,二分判断当前合成k条链子的链子最大长度是否>=m
题意:
有n种珍珠,每种珍珠i有ai颗.
一条链子由m颗不同种的珍珠组成.
给出n,m,数组a.问最多能合成多少条链子
数据范围:
n<=1000,ai<=2000,m<=100
思路:
暴力的方法也不简单啊.这里的珍珠优先度是先用数量最多的m颗珍珠,而且合成一条链子之后要重新选择最多的m颗,因此暴力的复杂度是O(mk),k是能合成的链子数.显然这链子数要到几十w不是问题,加上m大一点,就超时了
正确的做法是二分答案,而且二分判定感觉是一个非常经典的东西.我们原来的问题是m颗珍珠1条链子,问最多多少条链子,现在问题变成我要合成k条链子,问最多每条链子有几颗.显然,如果最多颗数>m,那就返回true了
原问题有一个关键的地方就是每条链不能有同种珍珠,因此我们不能一次把一种珍珠用完.而在二分判定里,由于问题变成了要合成k条链子,因此我们可以把同种珍珠往每条链子里塞珍珠.若果一种珍珠的数量ai>k,那么这种珍珠就只有k颗能用上,不然就会在某条链子上有重复的珍珠了.而若果ai<k,那么我们直接用完ai颗.注意这里的ai颗并不一定填在所有链子的同一个位置,你当它是按照蛇形来填珍珠就好了.
求出一个用了的珍珠数sum,如果sum>=k*m,那么说明填k条链子,出来的链子长度比m要大,ok!然后main函数就是不断二分这个链子数
总结:二分答案,二分判断当前合成k条链子的链子最大长度是否>=m
相关文章推荐
- soj1005. Roll Playing Games
- soj1041. Pushing Boxes
- Sicily 1007 To and Fro
- 中大周赛 2014年每周一赛第二场 Meet and Greet
- sicily 3980 二进制转十进制
- sicily 1137 河床
- sicily 6084 Times17
- sicily 1375 Balanced lineup
- sicily 1282 Computer Game
- sicily 1140 国王的遗产
- sicily 1513 Decoding
- sicily 1544 Integer Generator
- sicily 1558 He is Offside!
- sicily 1875 Small tree
- 【SOJ1136】【cogs775】山海经
- SOJ--1117: 最大整数
- SOJ--Zig-Zag
- SOJ--4389: 川大贴吧水王
- SOJ--4393: LaoB's problem1
- SOJ 1321. Robot