USACO24DEC Cake Game S 题解 [ 黄 ] [ 前缀和 ] [ adhoc ]
Cake Game:小清新前缀和题,但是我场上想了半天优先队列贪心假完了 /ll/ll/ll。
观察
本题有三个重要的结论,我们依次进行观察。
不难发现,第二个牛一定会拿 \(\frac{n}{2}-1\) 个蛋糕走。同时它拿走的蛋糕一定是左边一段、右边一段。如果它要使自己的分数最大化,那么显然就是要将左边和右边的和最大化。
那么第一头牛有啥用呢,其实根本没用。一个很显然的结论,第一头牛不可能让第二头牛的分数更小,只能让它大于等于原来的分数。证明也很显然,因为这些蛋糕的分数都是正数,合并任何两个蛋糕只会徒增这两个蛋糕的分数,让第二头牛吃到更多的分。
那么第一头牛能不能不让第二头牛多吃任何蛋糕呢?因为第二头牛最多吃 \(\frac{n}{2}-1\) 个,所以在博弈过程中我们一定可以取一个中点,然后在中点附近合并,防止它吃到合并后的蛋糕。这个可以自行画图理解。
实现
枚举前一段取了多少,前缀和后缀和计算一下取个最大值就好了。
时间复杂度 \(O(n)\)。
赛时忘记取蛋糕有后效性,直接优先队列取两边最大值了。我纯唐。
代码
#include <bits/stdc++.h>
#define fi first
#define se second
#define lc (p<<1)
#define rc ((p<<1)|1)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pi;
int n;
ll a[500005],pre[500005],suf[500005],ans=0;
void solve()
{
ans=0;
memset(pre,0,sizeof(pre));
memset(suf,0,sizeof(suf));
memset(a,0,sizeof(a));
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=n;i++)pre[i]=pre[i-1]+a[i];
for(int i=n;i>=1;i--)suf[i]=suf[i+1]+a[i];
for(int i=0;i<=n/2-1;i++)
{
int l=i,r=n-(n/2-1-i)+1;
ans=max(ans,pre[l]+suf[r]);
}
cout<<pre[n]-ans<<" "<<ans<<'\n';
}
int main()
{
//freopen("sample.in","r",stdin);
//freopen("sample.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int t;
cin>>t;
while(t--)solve();
return 0;
}
USACO24DEC Cake Game S 题解 [ 黄 ] [ 前缀和 ] [ adhoc ]的更多相关文章
- [JZOJ5280]膜法师题解--思维+前缀和
[JZOJ5280]膜法师题解--思维+前缀和 题目链接 暴 力 过 于
- leetcode1546题解【前缀和+贪心】
leetcode1546.和为目标值的最大数目不重叠非空子数组数目 题目链接 算法 前缀和+贪心 时间复杂度O(n). 1.对nums数组求前缀和: 2.在求前缀和过程中将前缀和sum插入到set集合 ...
- leetcode560题解【前缀和+哈希】
leetcode560.和为K的子数组 题目链接 算法 前缀和+哈希 时间复杂度O(n). 在解决这道题前需要先清楚,一个和为k的子数组即为一对前缀和的差值. 1.我们假设有这么一个子数组[i,j]满 ...
- [leetcode/lintcode 题解] 微软 面试题:实现 Trie(前缀树)
实现一个 Trie,包含 insert, search, 和 startsWith 这三个方法. 在线评测地址:领扣题库官网 样例 1: 输入: insert(" ...
- Codeforces Round #381 (Div. 2) D. Alyona and a tree 树上二分+前缀和思想
题目链接: http://codeforces.com/contest/740/problem/D D. Alyona and a tree time limit per test2 secondsm ...
- 第七届ACM趣味程序设计竞赛第四场(正式赛) 题解
Final Pan's prime numbers 题目连接: http://acm.uestc.edu.cn/#/problem/show/1272 题意 给你n,要求你在[4,n]范围内找到一个最 ...
- 【hdu6186】CS Course(前缀后缀异或)
2017ACM/ICPC广西邀请赛 重现赛1005CS Course 题意 给一个数列a,每次询问去掉第p个的与和.或和,异或和. 题解 预处理前缀和.后缀和即可. 但是当时想都没想就写了个线段树.线 ...
- HDU 5183 Negative and Positive (NP) 前缀和+哈希
题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5183 bc(中文):http://bestcoder.hdu.edu.cn/contests ...
- hdu 5480(维护前缀和+思路题)
Conturbatio Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total ...
- 「LuoguP2420」 让我们异或吧(树上前缀和
P2420 让我们异或吧-洛谷 题目描述 异或是一种神奇的运算,大部分人把它总结成不进位加法. 在生活中…xor运算也很常见.比如,对于一个问题的回答,是为1,否为0.那么: (A是否是男生 )xor ...
随机推荐
- Yii2之model
记录model常用方法 between: $model->andFilterWhere(['between','apply_time',$startTime,$endTime])
- C# 和 SQL Server中 PadLeft和PadRight 的用法
C# 中 PadLeft和PadRight 的用法 需求:需要一个字符串实现自增.是根据数据库中一个自增的int类型的值,实现自增的.但是要加上前缀.比如,数据库中有一个自增的值,为,2.那么这个自增 ...
- Fuzz技术综述与文件Fuzz
文章一开始发表在微信公众号 https://mp.weixin.qq.com/s?__biz=MzUyNzc4Mzk3MQ==&mid=2247486189&idx=1&sn= ...
- 记一个注意事项:从 forEach argument 返回的 Promise 被忽略
举例说明: const arr = [1, 2, 3] arr.forEach(async item => { // ... }) 上面的代码校验会出一个警告,从 forEach argumen ...
- 【前端】【探究】HTML - input类型为file时如何实现自定义文本以更好的美化
想到英语四级考了两次都没过,我觉得要多使用英文,所以本文使用英文书写. 本文讲述了遇到的问题,解决的思路,并讲述了解决方案,也许对你会有帮助. 目录 Problem description Solut ...
- asp.net core Theme 中间件
asp.net core中自定义视图引擎,继承接口 IViewLocationExpander public class ThemeViewLocationExpander : IViewLocati ...
- (五).NET6.0使用Serilog进行配置和实现日志记录
1.首先安装Serilog六件套神装包 也可以对个别相应的包进行删除等,例如:1是读取配置文件的,如果不需要通过配置文件进行操作,就可以不使用这个包.2是打印到控制台的,如果不需要打印到控制台,也可以 ...
- uwp 图片剪切
public async void BitmapTransformAndSaveTest() { var uncroppedfile = await Windows.Storage.Applicati ...
- SpringCloud (五) - 云服务器Centos7.6,安装JDK,Maven,Mysql,Redis
1.购买云服务器 购买地址:https://cloud.tencent.com/act/pro/2022double11_warmup 后面的环境都是基于此环境Centos7.6: 2.安装 Secu ...
- Golang-反射10
http://c.biancheng.net/golang/reflect/ Go语言反射(reflection)简述 反射(reflection)是在 Java 出现后迅速流行起来的一种概念,通过反 ...