摘要: 贪心经典题。 先把所有建筑按照 t2 排序,然后按顺序枚举每一个建筑:若可以修就修,否则就看一看修当前建筑,不修已经修了的最耗时建筑能否节省时间。 用优先队列维护即可。 阅读全文
posted @ 2018-03-03 10:26 312432424 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 对每一个位置上的颜色求一个前驱,表示上一次这个颜色出现的位置。 求 [ l , r ] 范围内有多少种不同的颜色,可以转化成求 [ l , r ] 有多少个位置的前驱在 [ 0 , l - 1 ]。 于是就可以树状数组套主席树。 每次修改 p 位置的颜色为 col 要考虑这样三种情况: ( 1 ) 阅读全文
posted @ 2018-03-02 20:27 312432424 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 由于有多个源点和汇点,就考虑把所有源点变为从一个总源点来供应,所有汇点汇到一个总汇点,再写一个 Edmonds-Karp 即可。 阅读全文
posted @ 2018-02-27 13:06 312432424 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 暴力明显超时,很容易想到开个桶。 类似 Eratosthenes 筛法统计答案即可。 阅读全文
posted @ 2018-02-26 14:48 312432424 阅读(82) 评论(0) 推荐(0) 编辑
摘要: n 似乎没有任何用。 先把鼹鼠按照出现顺序排序,然后如果打完第 i 只鼹鼠还能去打第 j 只鼹鼠必须第 j 只鼹鼠出现的时间 - 第 i 只鼹鼠出现的时间 <= 两只鼹鼠的哈曼顿距离。 阅读全文
posted @ 2018-02-26 14:38 312432424 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 以前见过类似的题。 先按照某种策略求一个耗时,时间尽量少。 用 f[ j ] 表示当第一台机器工作了 j 个单位时间时,另一台机器工作时间的最小值。 设 a[ i ] 表示只第一台机器完成第 i 个任务需要的时间,b[ i ] 表示只第二台机器完成需要的时间,c[ i ]表示两台机器一起完成需要的时 阅读全文
posted @ 2018-02-26 14:33 312432424 阅读(92) 评论(0) 推荐(0) 编辑
摘要: 这题让我很容易想起了求最长上升子序列,但是直接朴素算法 O( n ^ 2 ) 会超时。 考虑数在 int 范围内,那只需要保存二进制下某位为 1 的数为结尾的最大长度即可。 阅读全文
posted @ 2018-02-26 14:23 312432424 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 求 [ 1 , n ] 范围内所有数因数的倍数,可以转化成求 [ 1 , n ] 范围内所有数在这个范围内倍数的个数。 阅读全文
posted @ 2018-02-26 14:19 312432424 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 假设你当前有 m 个金币,如果你可以任意组出小于等于 m / 2 个金币,那么只要加一个钱袋放 m - m / 2 个金币即可。 阅读全文
posted @ 2018-02-26 14:14 312432424 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 裸的 dinic 求最小割。 阅读全文
posted @ 2018-02-26 14:10 312432424 阅读(141) 评论(0) 推荐(0) 编辑