【4.29】Codeforces 刷题

本文介绍了四道编程竞赛题目,涉及单调栈、木棍组合、点集美学和括号序列平衡,展示了动态规划、博弈思想及数据结构在解决这些问题中的应用。通过AC代码分享,深入解析了如何利用dp状态转移和桶存技巧优化求解过程。
摘要由CSDN通过智能技术生成

C1. Pokémon Army (easy version)

题意:给出一个序列 a a a ,要求求出一个单调递增的下标序列 b b b ,使得 a n s = a b 1 − a b 2 + a b 3 − a b 4 + . . . ans=a_{b_1}-a_{b_2}+a_{b_3}-a_{b_4}+ ... ans=ab1ab2+ab3ab4+... 最大,输出这个最大值。

思路:类似于一道博弈 dp。定义 d p _ m i n i , d p _ m a x i dp\_min_i,dp\_max_i dp_mini,dp_maxi 为选择 i 时的下界和上界,转移时反转即可。

AC代码:https://codeforces.com/contest/1420/submission/155273710


B. Applejack and Storages

题意:

你一开始有 n 根木棍,接下来有 q 次操作。

操作如下:

  • + x 增加一根长度为 x x x 的木棍。
  • - x 减少一根长度为 x x x 的木棍,保证减少之前有长为 x x x 的木棍。

你要计算出每次操作之后能否用 8 根木棍拼出一个矩形(可以是正方形)和一个正方形。

思路:存储每一种长度出现的次数,记录 4 个一组,2 个一组的个数,每次更新即可。“YES”的前提:4 个一组的个数大于 0,2个一组的个数大于 3。

练习了桶存和动态维护答案。

AC代码:https://codeforces.com/contest/1393/submission/155284388


C. Beautiful Sets of Points

略。

AC代码:https://codeforces.com/contest/268/submission/155287629


A. Balance the Bits

题意:给定 n n n a a a 序列,构造两个合法的括号序列,使得这两个括号序列第 i i i 个字符相同当且仅当 a i = 1 a_i=1 ai=1

题解:Balance the Bits(思维+括号序列构造)

思路:合法括号序列也就是无论何时 count(‘(’) ≥ count(‘)’) 。可以理解为y总讲的二维平面上的行走路线,或者是 括号得一分 括回扣一分,任何时候两个序列的分数都>=0,且最后分数为 0 。

那构造的时候,让两个括号序分数尽量接近 0 数轴,让两个分数之差不超过 2 ,且平均数在 1,2 两个数来回横跳,就能保证不会跳到 0 下边,且最后能回到 0。

AC代码:https://codeforces.com/contest/1503/submission/155349086


A. Bits

题意: n n n 组询问,每次给出一个区间 l , r l, r l,r,你需要输出在这个区间内二进制表示中1的个数最多的数。 如有多个答案,输出最小的那个。

题解:题解 CF484A 【Bits】

思路:刚开始自己的思路是,对于 l,r 消去相同的前导 0 1,然后答案就是 r 或者小于等于 r 的最大满位整形。可以过。后来发现题解的贪心更简单。

另外 unsigned int __builtin_popcount/_clz/_ctz(unsigned int) 的参数是 unsigned int ,被坑了。改成了 bitset<64>(x).count()

AC代码:https://codeforces.com/contest/484/submission/155351415

https://codeforces.com/contest/484/submission/155352223

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值