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 ...
随机推荐
- 基于STM32F4+FREERTOS进行结构体变量的传递
原始参考链接如下↓ Freertos 接收消息队列数据不对,是姿势不正确吗 - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! https://www.armbbs.cn ...
- <HarmonyOS第一课01>HarmonyOS介绍
视频链接: https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717496599725471?ha_sou ...
- Java---实现文件拷贝
直接上代码: package com.zjw.file; import java.io.BufferedInputStream; import java.io.BufferedOutputStream ...
- 【HUST】网安纳米|2023年研究生纳米技术考试参考
目录 1 纳米材料是什么 2 纳米材料的结构特性 3 纳米结构的其他特性 4 纳米结构的检测技术 5 纳米材料的应用 打印建议:PPT彩印(这样重点比较突出),每面12张PPT,简单做一下关键词目录, ...
- 【经验】Word 2021|如何在Word里做出和Markdown中一样漂亮的引用样式(结尾附成品)
文章目录 写在最前 方法以及参数 1 打开样式窗口 2 设置一些基本操作 3 打开格式窗口 4 修改样式 最后一步!保持间隔 成品的介绍(一些自卖自夸)+获取链接(不想看做法的话直接下载) 写在最前 ...
- 【记录】IDA和Ollydbg查看指令地址及地址对应的指令
文章目录 在IDA中查看指令地址 在Ollydbg中查看指令地址 在Ollydbg中查看地址对应的指令 在IDA中查看指令地址 在Ollydbg中查看指令地址 ollydbg在对应指令处,右键-查看- ...
- 鸿蒙NEXT开发实战教程—文字识别
今天跟大家分享一个ocr文字识别的小项目: 鸿蒙系统提供了文字识别的能力,支持简体中文.英文.日文.韩文.繁体中文五种语言.实现步骤为初始化文字识别服务.将图片转换为PixelMap.文字识别.释放O ...
- 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
今天在使用国产数据库金仓时,我发现每次遇到问题都习惯性地打开金仓社区进行搜索和查看相关信息.可是每次打开浏览器的操作总让我觉得有些麻烦,于是我决定不再依赖这种繁琐的过程.索性今天我把这个接口提取出来, ...
- JS的哪些新特性,你都用过么?
@charset "UTF-8"; .markdown-body { line-height: 1.75; font-weight: 400; font-size: 15px; o ...
- C#之MethodImpl(MethodImplOptions.Synchronized)
[MethodImpl(MethodImplOptions.Synchronized)] 是 C# 中用于指定方法同步的一个特性,它控制方法的执行方式,确保在多线程环境下某个方法的执行是线程安全的.它 ...