AtCoder Beginner Contest 337
AtCoder Beginner Contest 337
做题顺序有点奇怪。
先做的 C。套路题。令
再做的 B。智障题。令
又做的 A。入门题。第 5min 过了。
回来做 B。弱智题。几秒切了。前三题总共用了 6min。
再来看 D。阅读题。看懂题后发现是简单二维前缀和。做了种花后这种题压根不慌。第 24min 一遍过。
瞅一眼 E。交互题。慌了,以前好像只做过一两道交互题。
下面是考场上的思路,但是都跟正解的二进制没有任何关系:
- 问
。Result1。 - 询问次数
,每次问的长度 ,然后输出 次连续的 个数。Result2 & Result3。 - 可以只问前
个数。如果全回答 就是 (其实这就是正解的最后一步)。Result4 & Result5。
最后四题遗憾离场。
C - Lining Up 2
Problem Statement
There are
You are given the arrangement of the people as a sequence
- if
, person is at the front of the line; - if
, person is right behind person .
Print the people's numbers in the line from front to back.
Solution
令
如果
那么答案即为
代码。
D - Cheating Gomoku Narabe
Problem Statement
There is a grid with
Each cell contains one of the characters o
, x
, and .
. The characters written in each cell are represented by
For this grid, you may repeat the following operation any number of times, possibly zero:
- Choose one cell with the character
.
and change the character in that cell too
.
Determine if it is possible to have a sequence of o
written in all cells (in other words, satisfy at least one of the following two conditions). If it is possible, print the minimum number of operations required to achieve this.
- There is an integer pair
satisfying and such that the characters in cells are allo
. - There is an integer pair
satisfying and such that the characters in cells are allo
.
Solution
最终的 o
串一定是横着或竖着的。那么我们枚举这个横串的最左边的位置和竖串的最上面的位置。令其为
- 如果可以从
开始,往右一个横串,就代表第 行中,第 列都没有x
。如果确实一个x
都没有,那么如果要填满这个横串,就需要把第 行第 列中的所有.
改为o
。那么代价即第 行第 列中.
的数量。 - 同理,如果可以从
开始,往下一个竖串,就代表第 列中,第 行都没有x
。如果确实一个x
都没有,那么如果要填满这个竖串,就需要把第 列第 行中的所有.
改为o
。那么代价即第 列第 行中.
的数量。
因此需要预处理 x
和 .
的数量。直接二维前缀和解决。
代码中记录的是 x
和 o
的数量,那么 .
的数量就是 o
的数量。
最恶心的是不能开二维数组,得用二维 vector
。
E - Bad Juice
Problem Statement
This is an interactive problem (a type of problem where your program interacts with the judge program through Standard Input and Output).
There are
Takahashi must identify the spoiled juice by the next day. To do this, he decides to call the minimum necessary number of friends and serve them some of the
Print the number of friends to call and how to distribute the juice, then receive information on whether each friend has an upset stomach the next day, and print the spoiled bottle's number.
Solution
二进制拆分。构造很好解释但不好想。
我们枚举每一个二进制位
例如
- 第一个人吃菜品
。它们的二进制分别是 。这些二进制数的第一位都是 。 - 第二个人吃菜品
。它们的二进制分别是 。这些二进制数的第二位都是 。 - 第三个人吃菜品
,它们的二进制分别是 。这些二进制数的第三位都是 。
那么如果第
很显然这样计算会有
实际上,我们只需要对前
所以最终代码是这样的。注意 endl
。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」