Competition Set - AtCoder II

这里记录的是这个账号的比赛情况。

ABC310

2023-7-15

Solved:6/8

1973->2053

七场ABC,两场打得蛮烂的,都因为AT炸掉Unrated了;另外五场全部满Perf(2400)。
后面没有Rated的ABC了。这个小号本来就是拿来干这个的,结果一下就没了。考虑一下强行下分?

E(Easy,1261)

定义运算 为: 00=1,01=1,10=1,11=0。给定一个01序列,求它的所有子序列从左到右 的结果之和。

Solution:考虑递推,如果第 i 位是 0,那么以它结尾的所有序列结果和为 i1;如果是 1,则是 i 减去前一位的结果。

F(Easy+,1938)

已知 x1,...,xn 分别在 [1,a1],...,[1,an] 中等概率取整数值,求集合 {x1,...,xn} 有一个子集和为 10 的概率。

Solution:状压DP。设当前考虑到第 i 位,记录当前是否可以得到 0,1,...,10。选择大于 10 的转移统一考虑。

G(Medium,2696)

n 个人,第 i 个人每回合把手上所有的球给第 ai 个人。x1,...,k 中等概率取,问 x 回合后每个人手上球数的期望。

Solution:显然构成内向树森林。找到环,对每个点,考虑 k 回合后能不能到环上。如果不能,那么在树上打差分标记;如果能,在环上打差分标记。求和即可。代码不好写,没调出来。

ABC305

2023-6-10

Solved:7/8

1855->1973

G(Easy+,1989)

给定若干长度不超过6的ab串,求有多少个长为n的ab串不以其中任何一个为子串。

Solution:矩阵乘法。没了。

ABC304

2023-6-3

Solved:6/8

Unrated

ABC303

2023-5-27

Solved:6/8

1655->1855

F(Medium,2381)

有一个血量为h的boss,有若干种攻击,一种攻击会持续若干回合,每回合造成相同的定量伤害。问至少要多少回合才能干掉boss。

Solution:二分答案,口算何时最优。记得用__int128。没了。

ABC302

2023-5-20

Solved:8/8

1200->1655

G(Medium,1891)

给定一个长度为n,只包含1,2,3,4的数列。每次可以交换任意两个数。求将数列从小到大排序的最小交换次数。

Solution:贪心。将每个位置的初始值与其目标值构成的数对记录下来,总共12种(相同的不用记)。先处理cnti,jcntj,i,即取它们的min,加入答案,然后两个值都减去min。再类似的处理三元和四元的情况,分别用min的两倍和三倍更新答案。

H(Medium,2407)

给定一棵树,每个点上有一个数对。对每个v2,考虑从点1到点v的路径,在路径上每个数对中选出一个数,求能够选出不同数字个数的最大值。

Solution:先考虑确定的v如何求解。一个方法是建图,在每个数对的两个数之间连边。对每个连通块,如果是树,则贡献为点数1,否则贡献为点数。

因为只用考虑连通块,所以可以用并查集维护。记录下每个并查集内部是否有边即可。

对于原题,以1为根遍历这棵树,每进入一个点时在它的数对间连边,然后更新答案。回溯时撤销操作,这只需要用一个按秩合并的并查集实现即可。

ABC300

2023-4-29

Solved:7/8

0->1200

F(Medium-,1846)

给定由o和x组成的字符串S。将S复制m遍,然后将其中k个x改成o,求改完之后连续的o最多可能有多少个。

Solution:贪心。设最多能改完t个完整的S,考虑三类情况:

  • 最长连续o段包含了t个完整的S

  • 最长连续o段包含了t1个完整的S

  • 最长连续o段不包含完整的S

三种情况都可以预处理前缀和,后缀和,然后用双指针处理。注意判断m能否使上述情况出现。

G(Medium-,2343)

求不超过n的数中所有质因子都不超过k的数的个数。k100

Solution:双向搜索。将小于k的(不超过25个)素数分成两组。先dfs第一组素数能拼出的所有数,记录在一个vector里。然后dfs第二组素数能拼出的所有数,在第一个vector中二分查找即可。

ABC299

2023-4-22

Solved:6/8

Unrated

F(Hard-,2366)

给定字符串 S,求字符串 T 的数目,使字符串 TTS 的字串。

Solution:首先可以想到要尽可能向左边取,才可以使 T 不重复。

枚举中间的分界点,然后 DPdpi,j 表示两个 T 的结尾分别是 i,j。转移方程很好写。

这道题的难点在于状态定义。

G(Medium,2088)

给定一个数组,值域为 {1,2,...,m},求它的一个子序列,其是 1,2,...,m 的一个排列,且字典序最小。

Solution:重复两个步骤:

  • 找到尽可能短的一段后缀,包含需要的所有数。

  • 在上一个选的数到这段后缀的开头之间找到最小数,加入答案序列。

第二步可以直接暴力,能过但能卡。

posted @   by_chance  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示