ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

AtCoder Beginner Contest 261 A-F 题解

2022-07-25 13:01:50  阅读:237  来源: 互联网

标签:AtCoder Code 颜色 Submission 题解 261 op 逆序


官方题解太难读懂了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\) 时的额外奖励 \(a_i\)。(就是用桶存一下原题的 \(Y_i\))。

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

状态转移方程:

  • \(f(i,0)=\max\limits_{k=0}^{i-1}\{f(i-1,k)\}+a_0\)

  • \(\forall j \in [1,i],f(i,j)=f(i-1,j-1)+X_i+a_j\)。

最后取最大值输出即可。

Code

Submission

E - Many Operations

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

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

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

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

不难推出式子:

  • \(c(i,0)=op(c(i-1,0),i)\)

  • \(c(i,1)=op(c(i-1,1),i)\)

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

遍历 \(1\sim n\),当遍历到 \(i\) 时,\(p\gets c(i,p)\),累加答案。

最后统一输出即可。

Code

Submission

F - Sorting Color Balls

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

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

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

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

Code

Submission

标签:AtCoder,Code,颜色,Submission,题解,261,op,逆序
来源: https://www.cnblogs.com/663B/p/16517048.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有