12.22 codeforces 1463

problem A 

题意:三个怪兽,每次选一个怪兽造成一点伤害,第7的倍数次攻击改为对所有怪兽造成一点伤害,问能否一次性消灭三个怪兽

题解:sum是9的倍数且每个数不小于sum/9

证明:不难发现最简单的情况就是操作6次使得三个数都变成111然后再全部-1。考虑到多次的全部-1对这个最终态其实是没影响的,所以只要保证是9的倍数,就有可能会出现111的终态。考虑到全部数变成111的操作次数应该上限是sum/9 也就是一个很小的数和很大的数的组合,所以最小的数应该要>=sum/9。

problem B

题意:给定一个数列a,让你构造一个数列b使得

·1<=bi<=10^8

·bi是b i+1的倍数 或 b i+1是bi的倍数 (1<=i<n) 

·2 * sigma(ai-bi)<=s  s=sigma (ai)

题解:考虑最后一个式子,得出差值应该不能大于ai/2。

把a拆分成二进制,直接取首位是1其他位是0进行构造。

ps.事实上不知道要不要取a+1然后再求拆分一次然后取个min。。。

problem C

题意:

一个一维坐标轴,在最初时刻有个机器人位于坐标 0位置,有 n  个命令,对于每一个命令在 ti可以向 xi以每秒一单位的距离移动,当机器人在移动过程中,会忽视此时其他的命令。

现在定义第 i 个成功的命令:在  [ti,t(i+1)]经过 xi,则说明这条命令是成功的。第 t n+1 = inf ⁡ 。被忽视的命令也可能是成功的

题解:模拟,直接线性扫一遍看每次是否到达目标点,并且途中顺便处理有哪几条命令是成功的

problem D

题意:1,2,3,4,...,2n,这些数划分为n对数。然后你对其中一些对取min,一些对取max,然后得到b数组。设取min的个数为x
现在给你b 数组,存在多少个x使得最终结果为b数组。

题解:假设剩下的n个数是ai,a和b排序,考虑答案应该是x的两个上下界的差。

x的上下界应该是满足,前x个数都必须取min,且剩下的数取max是合法的。事实上,取max的数中存在可以取min的可能性。

那么答案就是这些又能取max又能取min的数的个数了。考虑到上下界都满足x长度的单调性,所以考虑二分x两次分别求上界和下界。

事实上也应该可以对min求一次下界,对max求一次下界,就知道有多少能取max也能取min的数了。

(ps 事实上我觉得贪心也能过,考虑到bi和b(i-1)之间的数应该是会对bi之后的数的max操作做贡献的,同理还有min操作,所以可以不用写二分来分别求min和max的下界。

problem E 

题意:给定一个有向图(有根树),然后给定m个数对(i,j)表示遍历到i就必须立刻遍历j。问合法的遍历序。

题解:考虑直接强行合并数对(i,j) 缩点。 考虑数对(i,j) 缩的点是否构成环。

原文地址:https://www.cnblogs.com/yz12138/p/14181864.html