[题解] [CF 1250J] The Parade
题面
题目大意:
给定一个 \(n\) , 所有军人的数量均在 \([1, n]\)
给定 \(a_i\) 代表高度为 \(i\) 的军人的个数
你要将这些军人分成 \(k\) 行, 满足下面两个条件
- 每行人数相等
- 同一行任意两个军人的高度差的绝对值不超过 1
问你最多能够选多少个军人分成 \(k\) 行
题解
题目满足单调性, 可以二分
我们二分一个 \(mid\) 表示每一行有 \(mid\) 个军人
不难证得首先将高度相等的分成一行, 再分高度不相等的是最优的
简要证明 : 可将不是上述方案的方案调整为是上述方案的方案, 结果不会更差
那么现在我们就是要看怎么分是最优的
我们将高度为 \(i + 1\) 的并到 \(i\) 上去等价于把 \(i\) 的并到 \(i + 1\) 上去
假如说 \(a_{i + 1} >= a_i \% mid\) , 我们就可以将 \(a_{i + 1}\) 减去 \(a_i \% mod\) , 再将 \(ans\) 加一
正确性:
首先如果不用 \(a_i\) 剩下的, 和这部分剩下的配对的 \(a_{i + 1}\) 肯定是要跟自己或者 \(a_{i + 2}\) 配对的
也就是说这一部分肯定是要用的, 如果用在自己和后面身上, 可能会导致后面的无法配对
也就是说
这一部分总会配对, 跟前面配对的不会对后面造成影响, 因为后面的总数没变
跟后面的配对可能会对后面的答案造成影响, 因为总数变了
由此可见这样配对不会更差
Code
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
typedef long long ll;
const int N = 30005;
using namespace std;
int T, n;
ll k, a[N], b[N], ans, sum;
template < typename T >
inline T read()
{
T x = 0, w = 1; char c = getchar();
while(c < '0' || c > '9') { if(c == '-') w = -1; c = getchar(); }
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * w;
}
bool check(ll x)
{
ll res = 0; b[1] = a[1];
for(int i = 1; i <= n; i++)
{
res += b[i] / x;
b[i + 1] = a[i + 1];
if(b[i + 1] >= x - (b[i] % x))
b[i + 1] -= x - (b[i] % x), res++;
}
return res >= k;
}
int main()
{
T = read <int> ();
while(T--)
{
ans = sum = 0; n = read <int> (), k = read <ll> ();
for(int i = 1; i <= n; i++)
sum += (a[i] = read <ll> ());
a[n + 1] = 0;
ll l = 1, r = sum;
while(l <= r)
{
ll mid = (l + r) >> 1;
if(check(mid)) ans = mid, l = mid + 1;
else r = mid - 1;
}
printf("%lld\n", 1ll * ans * k);
}
return 0;
}
[题解] [CF 1250J] The Parade的更多相关文章
- 竞赛题解 - CF Round #524 Div.2
CF Round #524 Div.2 - 竞赛题解 不容易CF有一场下午的比赛,开心的和一个神犇一起报了名 被虐爆--前两题水过去,第三题卡了好久,第四题毫无头绪QwQ Codeforces 传送门 ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T5(思维)
还是dfs? 好像自己写的有锅 过不去 看了题解修改了才过qwq #include <cstdio> #include <algorithm> #include <cst ...
- 竞赛题解 - [CF 1080D]Olya and magical square
Olya and magical square - 竞赛题解 借鉴了一下神犇tly的博客QwQ(还是打一下广告) 终于弄懂了 Codeforces 传送门 『题目』(直接上翻译了) 给一个边长为 \( ...
- 题解 CF 1372 B
题目 传送门 题意 给出 \(n\),输出 \(a\) ,\(b\) (\(0 < a \leq b < n\)),使\(a+b=n\)且 \(\operatorname{lcm}(a,b ...
- CodeForces - 1250J The Parade 二分
题目 题意: 一共n种身高,每一个士兵有一个身高.你需要把他们安排成k行(士兵不需要全部安排),每一行士兵身高差距小于等于1.你要找出来最多能安排多少士兵 题解: 这道题很容易就能看出来就是一道二分, ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T4(模拟)
随便模拟下就过了qwq 然后忘了特判WA了QwQ #include <cstdio> #include <algorithm> #include <cstring> ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T3(贪心)
是一道水题 虽然看起来像是DP,但其实是贪心 扫一遍就A了 QwQ #include <cstdio> #include <algorithm> #include <cs ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T2(模拟)
题目要求很简单,做法很粗暴 直接扫一遍即可 注意结果会爆int #include <cstdio> #include <algorithm> #include <cstr ...
- 题解——CF Manthan, Codefest 18 (rated, Div. 1 + Div. 2) T1(找规律)
就是找一下规律 但是奈何昨天晚上脑子抽 推错了一项QwQ 然后重新一想 A掉了QwQ #include <cstdio> #include <algorithm> #inclu ...
随机推荐
- C#一些面试知识题
1.简述 private. protected. public.internal 修饰符的访问权限答:private:私有成员, 在类的内部才可以访问(只能从其声明上下文中进行访问). protect ...
- Html5+Mui前端框架,开发记录(二):提交不了数据?
1.Mui 请求Webapi接口,返回所需要的数据(get,post) mui.ajax({ url: getAddress() + '/api/Qiliu/get?jsoncallback=?', ...
- solr 配置中文分析器/定义业务域/配置DataImport功能(测试用)
一.配置中文分析器 使用IKAnalyzer 配置方法: 1)把IK的jar包添加到solr工程中/WEB-INF/lib目录下 2)把IK的配置文件扩展词典, ...
- ubuntu14.04
14.10显卡驱动有问题 1.恢复启动引导菜单:启动盘 -> 运行到分区之前,不要分区 -> shift+f10 进入dos -> bootsec /fixmbr ->关闭重启 ...
- 为什么领域模型对于架构师如此重要? https://blog.csdn.net/qq_40741855/article/details/84835212
为什么领域模型对于架构师如此重要? https://blog.csdn.net/qq_40741855/article/details/84835212 2018年12月05日 14:30:19 绝圣 ...
- Bootstrap模态框报错
解决方案:上面的问题主要是包的引入问题,要确保上面的包多已经引入,我就是在引入jquery包时,引入了2个重复的包,去掉其中的一个,问题解决了.
- VS code C++代码没有自动提示
用了一段时间的VS code,发现一直都没有代码提示,奇了个怪?可能是插件有问题,于是重装C/C++,clang...等插件.结果......没用,
- 装机篇:将ubuntu 14.04安装在移动硬盘中
这样做有诸多好处,最大的好处莫过于获得新鲜感. 需要注意的只有一点,要把bootloader装在整个硬盘的MBR而不是单独某个分区的DBR里. 另,我所成功的版本为14.04.1,之前使用14.04. ...
- 什么是mvvm设计模式
目前比较流行的几个框架,例如vue.js.react.js.avalon.angular.js等,给自己的定位都是属于mvvm类型框架,那么什么是mvvm框架呢?mvvm是什么意思呢? 聊到mvvm就 ...
- 解决spring-boot-maven-plugin插件打包,springboot启动时报找不到主main问题
一:遇到的问题及解决方法 最近在搭建一个新项目时,使用spring-boot-maven-plugin插件打包,springboot项目在发布后启动时遇到找不到主main问题. 遇到这个问题当时感觉本 ...