苏格兰计划[副本] day4 CF1098

day4 #530 DIV1(CF1098)

A 1600

非常简单的贪心,首先如果孙子的sum比爷爷小,就是-1,其他情况都存在解,贪心的思路肯定是让偶数深度占得尽可能多,这样子重复的贡献比较多,那么显然把偶数节点赋值成儿子里S最小的就可以了

B 2100

首先可以发现我们选定了一个1*2的方块如AC以后,之后能保证能构造出来,后面要么是GT要么是AC,并且ACGT对应的下一行只能是GTAC,于是每次暴力枚举怎么填2*2,然后新的两行计算是填AC还是GT,同样列也是一样计算,总之是个大模拟,写的不是很开心

C 2400

一开始看错题了,还想是什么水题还有2400,结果发现还有一个分支系数的要求
首先有个简单结论,子树的节点个数和相当于每个节点深度和
那么其实问题转换成了给出n和s,要求构造数组a:

1. ∑ i = 1 x a [ i ] = n \sum_{i=1}^xa[i]=n i=1xa[i]=n
2. ∑ i = 1 x i ∗ a [ i ] = s \sum_{i=1}^xi*a[i]=s i=1xia[i]=s
3.minimum max{ ⌈ a [ i + 1 ] a [ i ] ⌉ \lceil \frac{a[i+1]}{a[i]}\rceil a[i]a[i+1]}

那么这个就比较好做了,我们每次枚举max,假设为k,那么至少就是一个n个点的完全k叉树,显然此时找一个最小的k满足 ∑ i = 1 x i ∗ a [ i ] ≤ s \sum_{i=1}^xi*a[i]\leq s i=1xia[i]s就是最小的分支系数了,接着就是把满二叉树挪成 ∑ i = 1 x i ∗ a [ i ] = s \sum_{i=1}^xi*a[i]=s i=1xia[i]=s挪法肯定是每次选一个叶子,接到另一个和他同深度的叶子下面,但这样显然会TLE,于是考虑直接往最深的点接,如果接不下,肯定有一个叶子到最深点之间的地方是可以接的(接在叶子比贡献小,接在最深点比贡献大)于是拿个队列维护一下就好了

D 2800

显然每次合并最小的两个,产生的危险次数最多,因为显然小的跟更大的合并,肯定不会更容易产生危险次数,而合并产生新的元素与次小的元素合并,也更不容易产生危险次数,所以优先合并最小的两个。
然后来思考怎么优化这个合并,显然如果两个数都在[ 2 i , 2 i + 1 − 1 2^i,2^{i+1}-1 2i,2i+11]之间时,是可以合并并产生危险次数的,然后显然每个区间里如果有一个不能在吃掉最小值时产生最小次数,他肯定是区间中的最小值,于是开个multiset强模就可以了

E 3400

不知道啥时候写了,好像是类欧几里得优化尺取,反正不想再写第二遍了

F 3500

看着是个字符串题,mark一下,等周末补

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值