Codeforces Round 802 (Div. 2)
1|0基本情况
A题秒了。
B题经典+4。
C题没想法(大概想了半小时)。
2|0B. Palindromic Numbers
2|1起步
首先很明显是高精。
然后要求加上的数字位数和给的位数相同。
答案不限制,只要回文就行。
第一思路就是口胡几个万能的回文答案。
-
给定的数的第一位比
小-
显然,把每一位都覆上
可以完成这个情景。 -
-
-
给定的数的第一位就是
-
明显要口胡一个多一位的回文数。
-
然后一开始我就真纯口胡了。
-
大概就是搞一个12321这类的回文串,然而这有可能是错的啊啊
-
2|2改错
幸好是发现了上面那个问题。
比如
那么我口胡的串就是
你要不看看自己在说什么。。。
一位放两位了都开始。
所以为啥不找一个和
从
考虑
- 只有当
( 减去最小的 不能超过 位数) - 且
( 减去最大的 不能不到 位数) - 随便移个项就能得到
, - 在这个范围里随便拎个回文数出来(比如
)就行了。
2|3代码
大整数类就不复制过来了,太长了。
3|0C. Helping the Nature
要用差分,待我学学。
OK周一学成归来。
3|1思路
我们考虑我们是怎么使得整个序列的数都变成
-
将序列中的所有数都变成同一个数,然后同时加或减某一个数之后才能做到。
-
或者将序列的中间变成
,将序列的左右部分分别变成同一个数,但是这样跟原问题有啥区别吗,还变得更加复杂了,所以就果断弃掉这个思路。
考虑如何操作使得区间中的所有数都变成同一个数:
我们考虑如果对原序列做差分,那么我们最终的答案就是差分序列所有的值为
我们会发现一个很神奇的事情:我们对于一个前缀/后缀整体减一,只会对一个位置的差分值产生影响,加一或减一,那么就利用这个性质一点一点将差分数组变成
注意:这只是将整个序列都变成同一个数,还需要将所有的数都变成
3|2代码
对于一个差分后的值
然而这是错的!
调了半天发现是 abs
的问题。
我用的 abs
没有声明 std
,所以是 C
自带的,而这个 C
自带的只能处理 int
,long long
就会爆掉。
用C++
的 abs
,即加上 std::abs
就过了。
__EOF__

本文链接:https://www.cnblogs.com/kdlyh/p/17892854.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下