abc的d泛做

abc046d

题意:给一个石头、布的序列,现在要求另一个序列使得每个前缀中石头数量大于布的数量并且得到的赢得次数比输得次数多的个数最大。

思路:由于我们要求石头数量大于等于布的数量,那么肯定就是石头,布交替。

abc047d

题意:给一个序列,现在从左向右走,在每一个地方可以卖出或买进一些苹果,单价\(a_i\)元。问把某些地方的单价改变后能够降低最大收益需要改变的最小值。

思路:肯定是在某处买进很多苹果,然后到后面的某个地方卖光。如果我们不把能够得到最大收益的所有的买进点都增加1,那样就肯定不能成功。

那么我们就从后往前扫描,然后把每个地方能找到后面的最大单价减去当前的单价作为每个苹果的收益,然后把最大收益点们都增加1。

abc048d

题意:给一个字符串,问现在如果删除一些字符,使得剩下再也没有一次可以删除之后使得没有连续相同字符的字符,问删除的字符数量的奇偶性。

思路:首先如果头尾不相等,那么我们肯定只能够做到\(abab\)这样的结果。那么答案就是总个数的奇偶性。否则我们只能够做到\(aba\)这样,就是总个数的奇偶性的反转。(即奇变偶、偶变奇)

因为我们可以隔着两个\(a\)的出现次数把所有的\(b\)之外的全删掉,只留下最后的一个\(b\)

abc049d

题意:给一堆路,以及一堆铁路,问对于每个点而言通过路和铁路都与之连通的点数。

思路:弄两个并查集,然后把每个数的(公路连通块代表元,铁路连通块代表元)放到一个数组中排序,这样两个代表元都相同的就是和它连通的。

abc050d

题意:问n之内有多少对数\((a,b)\)使得有\((u,v)\)从而\(u\ \text{xor} \ v=a,u+v=b\)

思路:首先我们打表,然后就可以根据规律弄出\(dp\)转移方程:

\(dp(2n)=2dp(n)+dp(n-1)\)

\(dp(2n+1)=dp(n)+2dp(n-1)\)

就没了。复杂度\(\log(n)\)

abc051d

题意:给一个带权无向图,问不在任何一条最短路上的边有多少。

思路:我的方法是把每条边禁止后重跑最短路,然后看是否某一条最短路的长度増长了。

但这个对于某条最短路是两种路线的来说是不行的。

所以得我们直接看从a走到b再走b_c这条路是不是等于a到c的最短路就好了。

abc052d

题意:给一堆点,现在问从第一个点开始走完所有的点的最小代价。走可以用B点传送到任意位置,或者每个位置花A点走一格。

思路:我们肯定是要么往后走一个特殊点,或者传送到那里。

那么就对于每个点加权\(\min(A(x_{i+1}-x_i),B)\)辣。

abc053d

题意:给一堆数,然后现在要删除某三个数的前后两个,然后问把这些数删除到互不相同所剩的最多数的数量。

思路:我们每个数最多留下一个。

那么删除的数量就可以求出。

然后我们每一下会删掉两个,就说明我们如果要删奇数个的话肯定得要多干掉一个应该留下来的东西。

abc054d

题意:给一堆物品,有两个重量和价值,要求是否能够拿出一些重量比为\(a:b\)的,并且价值最大。

思路:直接背包。没了。

abc055d

题意:有一些动物排成一圈,分别是羊和狼,现在每个动物说它周围两个动物种类是否相等。狼肯定说谎,羊肯定说真话。

现在就是要求每个动物是什么。

思路:如果我们知道了前两个动物分别是什么,那么后面的所有动物都可以依次求出来。

那么就是枚举前两个动物。

然后第三个就是根据第二个动物是羊/狼,左右是否相等来推出。

直到最后第一个动物是否成立,(以及第二个动物是否根据第一个动物说的成立)(我就是这里没判断而挂掉的)。

abc056d

题意:给一堆数,现在问每一个数是否是多余的,多余的定义是如果所有包含这个数的,和超过\(k\)的集合去掉他还是大于\(k\)

思路:那么我们知道多余的数肯定是个从最小值开始的连续区间。

就可以二分。check的时候我们就做一个背包,如果可以有大于等于\(k-a\)并小于\(k\)的和,那么就说明他不是多余的。

abc057d

题意:给一堆数,求出一个长度为\(a\)\(b\)之间的集合使得其平均数最大。

思路:首先枚举长度,那么我们可以找到最大的平均数。

那么我们的答案个数就是最后一个数的个数取他真正取的个数。

所以还要预处理一个Cnm。

最后就是浮点误差了。我因为这个WA了一个点。(大概)

abc058d

题意:给一堆平行于x轴或y轴的直线,然后现在问我们围成的每个矩形的面积和。

思路:推一堆式子就发现只是要求每一小段出现在所有区间中的次数(即包含其的区间个数)之积的和,对于xy两轴分别处理。

然后两轴的结果乘起来即可。

abc059d

题意:给两个数,问每次从一个数中拿出2i,把i放到另一个数中,最后谁不能动了输。

思路:如果两个数相差只有1,那么先手必败。

因为我们如果将大数分一部分给小的,这样就会变成一个更小的子问题,对手再变成两个相差1,从此以往就会变成01这种,对手必胜。

abc060d

题意:给一些物品,有重量和价值,其中所有的数重量差不超过3,然后现在问如何取不超过w重量的物品,而且价值最大。

思路:因为重量之差不超过3,那么重量就可以通过(个数,总重-个数\(\times\)最小重量)表示。

就可以背包了。

猜你喜欢

转载自www.cnblogs.com/denverjin/p/10926436.html