Codeforces Educational Round

代码部队教育回合

Edu 174E - A, B, AB and BA(2300)#

本题旨在考察选手的分讨能力和耐心。

容易想到,由于不能有相邻相同,所以在 AABB 中间断开,将序列分为四种:

  1. ABABAB...B

  2. BABABA...A

  3. ABABA...A

  4. BABAB...B

到这里就需要考虑怎样贪心使用每一种组,使其更优了。直接考虑其实并不容易,我在这里使用了错误的贪心策略。

正确的策略可以考虑:单个 a 和单个 b 肯定尽量少用,因为这两种比较万能。一开始假定每一个组都只有一个字符,那么要求 cntaacntbb 满足。

现在有了 ABBA 这种分组方式,就可以将一些东西合并。一次合并之后 A 能减少 1B 也能减少 1

对于第三种和第四种,都是好的,因为这两种无论如何都能合并成 ABBA,且合并完之后仍然形式不变。但是对于第一种和第二种,例如第一种,假如其长度为 l,如果全是 AB,能拼成 l2 个,但如果出现了一个 BA,就只能拼成 l21 个。如果在长的串中用了 AB,那么就会有很多短的串中出现 BA,这不优。所以将第一种串排序,先填小的串,使得尽可能多个串不被浪费。第二种串同理。填完之后再考虑第三种和第四种,最后判断一下剩下的单独 A 的个数和单独 B 的个数是否满足 ab 的限制即可。

Edu 173E - Matrix Transformation(2300)#

没多久就想到了,但是一直 WA on Test 2,感觉我的方法没问题,为啥一直过不了?看了题解发现和题解做法不同,题解做法我曾经考虑过,但是感觉还是比较麻烦。然后拷了题解代码对拍,找不到差异。最后突然发现是判断的时候,a 数组没有取出某一位。

首先显然拆位。正着做不好做,将这个过程倒过来。最后一次操作形如将某一行全部赋为 0 或是将某一列全部赋为 1。那么如果 b 矩阵中某一行全部为 0,就可以最后进行将这行全部赋为 0 的操作,那么之前这一行的值是什么就无所谓了。不妨将这一行的值视为 -1,即可以是 0 也可以是 1,再不断找全为 0 的行或全为 1 的列,最后再判断与 a 矩阵是否相同。正确性显然。

Edu 170E - Card Game(2200)#

怎么感觉这么水,还做了半个小时,速度真是慢。

直接 DP。由于玩家 A 必须所有牌都强于玩家 B,而除了第一行以外每一行的牌只能强于本行前面的,所以 2 到 n 行是独立且相同的。对于每一行 DP,设 fi,j 表示某一行前 i 列填完了,玩家 B 比玩家 A 多 j 张牌的方案数,要保证每个时刻 j0,否则 A 会多出一些赢不了的牌。

然后再用一个背包将单行的 f 合并成多行的,得到 gi 表示在 2 到 n 行,B 总共比 A 多了 i 张牌的方案数。这 i 张牌要在第一行夺回来。设 hi,j,k 表示第 1 行,填了前 i 列,B 比 A 多 j 张牌,还有 k 张牌要夺回来。那么当 j=0 时,可以转移到 k1,否则可以转移到 j+1j1。最后答案是 hm,0,0,可以滚动一下数组。

反正 n,m500,这怎么做都能过吧。

作者:Terminator-Line

出处:https://www.cnblogs.com/Terminator-Line/p/18739934

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Terminator-Line  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示