CF1928D Lonely Mountain Dungeons 题解
CF1928D Lonely Mountain Dungeons
提供一个三分做法。
假设我们已经知道了分 \(x\) 队,那对于每一个种族,我们就应该尽量平均分到这 \(x\) 个队伍中。我们可以先将总数 \(c_i\) 平均分,再把余数 \(r\) 分给前 \(r\) 个元素,每个元素分一个 \(1\)。
然后,我们需要统计答案。我们发现这是一个类似带权数线段的计数,所以我们对于平均分之后的数维护一个后缀和。每处理到一个数时,将后缀和减去这个数,并用这个数乘以后缀和乘以 \(b\) 累加到答案中。这个过程的时间复杂度是 \(O(c_i)\) 的,由于题目保证 \(\sum c_i\le2\times10^5\),这个时间复杂度可以接受。
接下来,我们考虑优化寻找答案的过程。记分 \(x\) 队的战斗力为 \(F_x\),可以证明 \(F_x\) 为单峰函数。当前分的队数越多,扩一个队能增加的收益就越少。因为同一个队不可以贡献的对数是该队人数平方级别的,分的队数越多,平均分人数减少越慢。但是扩一个队的代价一定,所以答案的差分是递减的。因此,\(F_x\) 为单峰函数。
既然答案是单峰的,直接三分即可。
#include <bits/stdc++.h>
using namespace std;
long long t,n,b,x,a[300000];
long long check(long long w)
{
long long ans=0;
if(w==0)return 0;
for(int i=1;i<=n;i++)
{
long long tol=a[i],s=a[i]/w,r=a[i]%w;
for(int i=1;i<=r;i++)tol-=(s+1),ans+=(s+1)*tol;
while(tol>0)tol-=s,ans+=s*tol;
}
return ans*b-x*(w-1);
}
int main()
{
scanf("%lld",&t);
while(t--)
{
long long ans=0,mx=0;
scanf("%lld%lld%lld",&n,&b,&x);
for(int i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
mx=max(mx,a[i]);
}
long long l=0,r=mx;
while(l<=r)
{
long long mid1=(l*2+r)/3,mid2=(l+r*2)/3;
if(check(mid1)<=check(mid2))ans=max(ans,check(mid2)),l=mid1+1;
else r=mid2-1;
}
printf("%lld\n",ans);
}
return 0;
}
感谢 sunrise1024 提供的证明。
CF1928D Lonely Mountain Dungeons 题解的更多相关文章
- Codeforces Gym 100269A Arrangement of Contest 水题
Problem A. Arrangement of Contest 题目连接: http://codeforces.com/gym/100269/attachments Description Lit ...
- Smallest Difference(暴力全排列)
Smallest Difference Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10387 Accepted: 2 ...
- POJ 2002 Squares [hash]
Squares Time Limit: 3500MS Memory Limit: 65536K Total Submissions: 16631 Accepted: 6328 Descript ...
- 算法与数据结构基础 - 深度优先搜索(DFS)
DFS基础 深度优先搜索(Depth First Search)是一种搜索思路,相比广度优先搜索(BFS),DFS对每一个分枝路径深入到不能再深入为止,其应用于树/图的遍历.嵌套关系处理.回溯等,可以 ...
- 算法与数据结构基础 - 数组(Array)
数组基础 数组是最基础的数据结构,特点是O(1)时间读取任意下标元素,经常应用于排序(Sort).双指针(Two Pointers).二分查找(Binary Search).动态规划(DP)等算法.顺 ...
- 【题解】Mountain Walking-C++
题目题意翻译题意简述:现在给一个N*N的矩阵,找一条路径从左上角走到右下角,每次可以向上下左右四个方向中某个方向走.要求走过的点中,数字最大的减去最小的.要求值越小越好.现在就是要求这个值. 输入格式 ...
- [USACO 12JAN]Mountain Climbing
Description Farmer John has discovered that his cows produce higher quality milk when they are subje ...
- LeetCode All in One题解汇总(持续更新中...)
突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...
- LeetCode 531. Lonely Pixel I
原题链接在这里:https://leetcode.com/problems/lonely-pixel-i/ 题目: Given a picture consisting of black and wh ...
- LeetCode 845. Longest Mountain in Array
原题链接在这里:https://leetcode.com/problems/longest-mountain-in-array/ 题目: Let's call any (contiguous) sub ...
随机推荐
- Innodb快速复习
放一张官方架构图: 参考文章: 一文带你了解MySQL之InnoDB_Buffer_Pool-阿里云开发者社区这一篇buffer pool讲解的很好 [动画演示:MySQL的BufferPool和Ch ...
- .Net Core环境绑定及配置launchSettings.json
1.Asp.net Core的默认环境配置在项目Properties-->launchSettings.json下 { "$schema": "http://jso ...
- 使用PowerShell开发脚本程序进行批量SVN提交
使用PowerShell开发脚本程序进行批量SVN提交 随着软件开发的不断进步,版本控制系统如Subversion (SVN) 成为了团队协作和代码管理的重要工具.当需要一次性提交大量文件时,手动操作 ...
- Spring基于注解的CRUD
目录 Spring基于注解的CRUD 代码实现 测试 方式一:使用Junit方式测试 方式二:使用@RunWith(SpringJUnit4ClassRunner.class)注解测试 Spring基 ...
- 通用的servlet
1 通用的servlet实现的原理 2 实例 2.1 目录结构 2.2 BaseServlet.java 2.3 ServletDemo.java 2.4 index.html 2.5 test.ht ...
- 鸿蒙NEXT开发实战教程—文字识别
今天跟大家分享一个ocr文字识别的小项目: 鸿蒙系统提供了文字识别的能力,支持简体中文.英文.日文.韩文.繁体中文五种语言.实现步骤为初始化文字识别服务.将图片转换为PixelMap.文字识别.释放O ...
- 堆叠、MLAG、VPC、VSS 技术对比及架构建议
堆叠.MLAG.VPC.VSS 技术对比及架构建议 1. 堆叠(Stacking) 技术实现: 多台物理设备通过专用堆叠线缆(如华为的Stack.华三IRF.思科StackWise)或普通光纤/以太网 ...
- Join 实现 2 表数据联动
最近在做一个简单的报表, 用的工具是帆软报表, 一开始觉得有点low, 现在看看还行, 除了界面真的太丑外, 其它还要, 这种大量要使用 sql 的方式, 我觉得是非常灵活高效的, I like . ...
- RPC实战与核心原理之优雅启动
优雅启动:如何避免流量打到没有启动完成的节点? 回顾 优雅停机,就是为了让服务提供方在停机应用的时候,保证所有调用方都能"安全"地切走流量,不再调用自己,从而做到对业务无损.其中实 ...
- 构建现代交互式平台:CodeBuddy如何简化复杂系统开发
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 交互式平台的架构挑战 构建现代 ...