[题解]CF33C Wonderful Randomized Sum
CF33C Wonderful Randomized Sum
我们可以发现,如果两区间不交叉也不会影响到结果,所以我们只需要考虑不交叉的情况即可。
我们所选择的前缀\(1\sim i\)应满足区间和最小,后缀也一样。所以用两个数组\(lr,rl\)分别记录下\(1\sim i\)(前缀)最小和、\(i\sim n\)(后缀)最小和。然后枚举分割点\(i\),把前缀和后缀的和取一个最小值。答案即为\(sum-2*min(lr[i],rl[i+1])\quad(1\leq i \leq n)\)(\(sum\)是所有元素的和)。
点击查看代码
#include<bits/stdc++.h> #define int long long using namespace std; int n,a[100010],lr[100010],rl[100010],sum; signed main(){ cin>>n; for(int i=1;i<=n;i++) cin>>a[i],sum+=a[i]; for(int i=1,cur=0;i<=n;i++) cur+=a[i],lr[i]=min(lr[i-1],cur); for(int i=n,cur=0;i>=1;i--) cur+=a[i],rl[i]=min(rl[i+1],cur); int minn=LLONG_MAX; for(int i=1;i<=n;i++) minn=min(minn,lr[i]+rl[i+1]); cout<<sum-2*minn; return 0; }
分类:
题解
标签:
Codeforces
, 前缀和
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效