Codeforces Round #840 (Div. 2) and Enigma 2022 - Cybros LNMIIT C. Another Array Problem(贪心,思维)
题目链接:https://codeforces.com/problemset/problem/1763/C
大致题意: 给你长度为n的数组,你可以进行任意次操作,操作内容如下:
选择俩个下标i,j;对于i到j之间的所有数,将他们变成abs(ai-aj);
问,在进行以上操作后,数组的总和最大可以是多少?
解题思路:我们观察这个操作,不难发现,如果ai和aj其中一个是0,对于数组的总和来说,是比较好的一种情况;
进一步想,如果ai是最大,aj是0,那么对于i到j区间的变化来说,是最优的;
对于一个数组,最大值一定是有的,最小值却不一定是0,那么这个时候该怎么办?
我们可以发现,如果ai和aj相同,那么进行操作后,i到j之间就变成了0;
那么因为这个操作会让区间的数都相同,所以我们完全可以找到俩个数相同,进而使数组出现0;
所以,对于n>=4的数组来说,其结果是最大值乘长度;(为什么是n>=4,读者可以思考一下);
那么对于n==2和n==3的情况,完全可以分类讨论一下,也就是枚举结果;
那么这题就解决了,时间复杂度:O(n);
ac代码:
这题主要是对于思维能力以及分类讨论的能力的考查,其实思维相对来说还是比较简单的,就是对于n==3的情况,有没有考虑完全(因为考虑不完全,wa了好几发,悲 :(
__EOF__

本文作者:XiCen
本文链接:https://www.cnblogs.com/ACMER-XiCen/p/17095064.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/ACMER-XiCen/p/17095064.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
分类:
codeforces
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通