AtCoder Beginner Contest 261 A-F 题解

官方题解太难读懂了QAQ,先写 A-F 的题解,后面的 G 和 Ex 蹲一个大佬的题解 awa。

A - Intersection

差分一下就行。

(也不知道是谁没测样例就交结果 WA 了一发)

Code

Submission

B - Tournament Result

枚举判断即可。

Code

Submission

C - NewFolder(1)

我打过的最简单的 C。直接 std::map<std::string,int> 存一下就行。

Code

Submission

D - Flipping and Bonus

发现状态很多,而且数据允许 O(NM) 的算法通过,考虑 DP。

预处理出得分为 i 时的额外奖励 ai。(就是用桶存一下原题的 Yi)。

f(i,j) 表示第 i 轮得分为 j 时得到的最多钱数。

状态转移方程:

  • f(i,0)=maxk=0i1{f(i1,k)}+a0

  • j[1,i],f(i,j)=f(i1,j1)+Xi+aj

最后取最大值输出即可。

Code

Submission

E - Many Operations

看完题面,对于所有操作,显然二进制位与位之间没有任何影响,联想到 [NOI2014] 起床困难综合症 这个题,考虑按位拆分。

对于每一位,可以预处理出每次操作的影响。

具体而言,设 c(i,j) 表示当前位初始值为 j(j{0,1}),进行前 i 次操作后的值。

op(j,i) 表示 j 经过第 i 次操作后的值。

不难推出式子:

  • c(i,0)=op(c(i1,0),i)

  • c(i,1)=op(c(i1,1),i)

然后就是统计答案,用一个变量 p 表示当前该位的值,p 初值为题中的 C 该位的值 。

遍历 1n,当遍历到 i 时,pc(i,p),累加答案。

最后统一输出即可。

Code

Submission

F - Sorting Color Balls

如果不考虑颜色,这道题的答案显然就是逆序对的个数。

但现在有了限制,颜色相同时一次交换并不会产生代价。

也就是说,一个颜色相同的逆序对对答案没有任何影响。

那么我们可以先算出原序列里的逆序对个数,再用 std::vector 把每种颜色的值存一下,对于所有颜色算一遍逆序对,再用整个序列的逆序对数减去这个数即可。

Code

Submission

posted @   ImALAS  阅读(108)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示