cf1372 D. Omkar and Circle
题意:
n 个数顺序排成一个环,每次选一个位置 ,令 然后删掉 。直到剩下一个数为止。问剩下的数最大是多少
思路:
只有在最后一次操作,即环中只剩三个数时可以计入相邻的两个数,否则被计入的数在任意时刻两两不相邻
环中只剩三个数时,取其中较大的两个即是答案。考虑这三个数是怎么来的
把初始的环切成三段,每段长为奇数,每段内被计入的数两两不相邻且首尾两数一定要计入,那么这三段分别形成最后的三个数之一。
所以应在每段中选位置 的数。为了最大化三段中两段的价值,令某段的长为1
那么初始环形如 ,其中 表示被计入。考虑枚举后两段的分界点,则分界点处间隔为1的前缀和和后缀和加起来就是答案
ll n, a[N], l[N], r[N];
void sol() {
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
l[1] = a[1]; for(int i = 2; i <= n; i++)
l[i] = l[i-2] + a[i];
for(int i = n; i; i--) r[i] = r[i+2] + a[i];
ll ans = r[1];
for(int i = 2; i <= n; i++) ans = max(ans, l[i-1] + r[i]);
cout << ans;
}
标签:
思维
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现