2018年8月7日训练日记

HDU 5380 Travel with candy(贪心+单调队列)

题意:一条直线上从左至右依次排着0-n号一共n+1个城市,XX要从第0个城市到第n个城市去。现在告诉每个城市到第0号城市的距离。已知XX每走一单位长度的距离就会吃掉一颗糖,XX身上最多带m颗糖,每个城市都有糖果店,XX可以在路上根据当前城市的糖果店的买入卖出价格进行补充口袋和卖出糖果赚钱。那么现在问题来了,它这么从0点走到n点,不走回头路,最少要花费多少钱?(如果最后赚钱了,输出就是负的)出题人保证了m大于等于任意两个相邻的城市之间的距离。

既然要花费最小,那么在路上消耗的糖果一定是最便宜的。我们每次离开一个城市的时候都把口袋补充满m个糖果,最后有剩余就相当于没买或者中途以更高的价格卖出了。于是在到达这一个城市时,除去路上消耗的糖果,我们考虑以下情况:

如果当前口袋中有买入价格高于当前的卖出价格的糖果时,我们就假设之前没买这些糖果。(也就是以原来的买入价卖出)

如果当前口袋中有买入价格低于当前的卖出价格的糖果时,就有三种情况:1、在这个点将这些糖果卖出。2、在后面价格更高的地方卖出。3、最后剩余了。这三种情况都相当于要在某些地方卖出。我们就把这些糖果在途中遇到的卖出价最高的地方卖出。其实就是更新它的卖出价为当前经过的最大的卖出价即可。题解参考这里。

HDU 5381 The sum of gcd(数论+莫队算法)给出一序列a,定义这里写图片描述,m次查询,每次给出l,r,求f(l,r) 。莫队算法解决的问题是对区间[l,r]的查询可以向[l+-1,r+-1]进行O(1)或O(logn)转移。如果能安排适当的询问顺序,使得每次询问都能用上上次运行产生的中间变量,那么我们将可以在更优的复杂度完成整个询问。在排序时,我们并不是按照左右端点严格升序排序询问,而只是令其左右端点处于“大概是升序”的状态。具体的方法是,把所有的区间划分为不同的块,将每个询问按照左端点的所在块序号排序,左端点块一样则按照右端点排序。注意这个与上一个版本的不同之处在于“第一关键字”是左端点所在块而非左端点。大部分都是离线处理询问。时间复杂度与分块的大小有关。虽然这道题没看懂,但是莫队的基本思想还是看懂了的。找了一份资料,争取早日学会莫队。

HDU 5383 Yu-Gi-Oh!(费用流)题目大意:有n种怪物,有两个种类0和1,每种怪物都有其等级和杀伤力,一只0怪物和一只1怪物可以组成一只大怪物,其等级是小怪物等级相加,他有自己的杀伤力。有些怪物要有特定的怪物组成。求出可以组成的怪物杀伤力的最大值。显然是费用流。。。s连种类为0的怪,流量1费用0,种类为1的怪连t,流量1费用0。然后两个怪能合成就相互建边,流量为1,费用原来两个怪物的杀伤力之和-合成怪物的杀伤力。注意:只要两个小怪合成的大怪,杀伤力小于两个小怪的攻杀伤力和,就不加边。导致中间的边数目一下子减少很多,也就不怕TLE了。题解参考这里。

hdu 5384 Danganronpa(AC自动机)AC自动机基本应用。求n个单词在m个文本中出现的次数。套模板即可。话说已经好久没做过AC自动机的题目了,正好又去饶齐博客翻了一遍。

加油。

你可能感兴趣的:(训练日记)