【题解】期末考试 六省联考 2017 洛谷 P3745 BZOJ 4868 贪心 三分
题目传送门:这里是萌萌哒传送门(>,<)
啊♀,据说这题有个完全贪心的做法,但是要维护太多东西好麻烦的(>,<),于是就来口胡一发三分的做法。
思路很简单,假设我指定了一个x,要求通过调整,所有的成绩都最迟在第x天出。
调整到第x天的代价是很容易通过贪心计算出来的啦,复杂度线性。
然后我们考虑从大到小枚举x,每次计算出代价之后更新答案。
再然后我们大胆猜想这是一个单峰函数!
既然都单峰啦那直接三分就好啦(>,<)。
实际上我不知道它是不是真的是单峰函数。。。但是就AC了。。。
如果这个做法能被叉掉的话欢迎dalao来叉♀啦,求轻虐。。。
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef long long ll;
const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;
const int MAXN = 100010;
const int MAXM = 100010;
ll A, B, C;
int n, m, t[MAXN], b[MAXM];
void input() {
scanf( "%lld%lld%lld", &A, &B, &C );
scanf( "%d%d", &n, &m );
for( int i = 0; i < n; ++i ) scanf( "%d", t+i );
for( int i = 0; i < m; ++i ) scanf( "%d", b+i );
}
ll f( int lim ) { // 贪心计算最迟在第lim天出所有成绩的最小代价
ll y = 0;
ll left = 0, extra = 0;
for( int i = 0; i < n; ++i )
if( lim > t[i] ) y += (lim - t[i])*C;
for( int i = 0; i < m; ++i ) {
if( b[i] < lim ) left += lim - b[i];
else extra += b[i] - lim;
}
A = min(A, B);
left = min(left, extra);
y += left*A + (extra - left)*B;
return y;
}
void solve() { // 三分
int low = *min_element(t, t+n);
int high = *max_element(b, b+m);
ll ans = INFLL;
while( high-low >= 4 ) {
int lm = low + (high-low)/3;
int rm = high - (high-low)/3;
if( f(lm) < f(rm) ) high = rm;
else low = lm;
}
for( int i = low; i <= high; ++i )
ans = min(ans, f(i));
printf( "%lld\n", ans );
}
void solve2() { // 对于C=1e16的特殊数据,必须要满足所有学生的需求
int lim = *min_element(t, t+n);
ll left = 0, extra = 0;
for( int i = 0; i < m; ++i ) {
if( b[i] < lim ) left += lim - b[i];
else extra += b[i] - lim;
}
A = min(A, B);
left = min(left, extra);
ll ans = left*A + (extra - left)*B;
printf( "%lld\n", ans );
}
int main() {
input();
if( C == ll(1e16) ) solve2();
else solve();
return 0;
}
【题解】期末考试 六省联考 2017 洛谷 P3745 BZOJ 4868 贪心 三分的更多相关文章
- 【BZOJ4868】[六省联考2017]期末考试(贪心)
[BZOJ4868][六省联考2017]期末考试(贪心) 题面 BZOJ 洛谷 题解 显然最终的答案之和最后一个公布成绩的课程相关. 枚举最后一天的日期,那么维护一下前面有多少天可以向后移,后面总共需 ...
- [luogu] P3745 [六省联考2017]期末考试 (贪心)
P3745 [六省联考2017]期末考试 题目描述 有 \(n\) 位同学,每位同学都参加了全部的 \(m\) 门课程的期末考试,都在焦急的等待成绩的公布. 第 \(i\) 位同学希望在第 \(t_i ...
- 六省联考2017 Day1
目录 2018.3.18 Test T1 BZOJ.4868.[六省联考2017]期末考试 T2 T3 BZOJ.4870.[六省联考2017]组合数问题(DP 矩阵快速幂) 总结 考试代码 T1 T ...
- 【BZOJ4873】[六省联考2017]寿司餐厅(网络流)
[BZOJ4873][六省联考2017]寿司餐厅(网络流) 题面 BZOJ 洛谷 题解 很有意思的题目 首先看到答案的计算方法,就很明显的感觉到是一个最大权闭合子图. 然后只需要考虑怎么构图就行了. ...
- 六省联考2017 Day2
目录 2018.3.27 Test 总结 T1 T2 T3 BZOJ.4873.[六省联考2017]寿司餐厅(最小割ISAP 最大权闭合子图) 考试代码 T1 T2 T3 2018.3.27 Test ...
- 洛谷 P3747 [六省联考2017]相逢是问候 解题报告
P3747 [六省联考2017]相逢是问候 题目描述 \(\text {Informatik verbindet dich und mich.}\) 信息将你我连结. \(B\) 君希望以维护一个长度 ...
- P3746 [六省联考2017]组合数问题
P3746 [六省联考2017]组合数问题 \(dp_{i,j}\)表示前\(i\)个物品,取的物品模\(k\)等于\(r\),则\(dp_{i,j}=dp_{i-1,(j-1+k)\%k}+dp_{ ...
- [BZOJ4868][六省联考2017]期末考试(三分)
4868: [Shoi2017]期末考试 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 964 Solved: 439[Submit][Status ...
- BZOJ 4872 luogu P3750 [六省联考2017]分手是祝愿
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description ...
随机推荐
- 初试Gevent – 高性能的Python并发框架
Gevent是一个基于greenlet的Python的并发框架,以微线程greenlet为核心,使用了epoll事件监听机制以及诸多其他优化而变得高效. 于greenlet.eventlet相比,性能 ...
- KETTLE设置变量
一.kettle变量类型 kettle变量分为: 1.环境变量 通过 set variables组件设置变量,范围可以是:JVM变量.作业变量.父作业变量.根作业变量.使用时通过${var}或 %%v ...
- Struts2:Struts2在jsp中使用标签时值的获取
在OGNL的使用中,需要访问一系列的对象,这些对象放在OGNL的context中,context是一个Map结构,实际上它和ActionContext是相应的. 当用户发送请求时,struts会创建A ...
- Ribbon源码解析
SpringCloud中的Ribbon开源项目,提供了客户端的负载均衡算法.这篇文章,我们来介绍下他是如何实现的.为了方便理解,我们以客户端调用的流程来介绍,其中会穿插介绍相关源代码. 简单回顾下Ri ...
- webgl glsl
GLSL是什么? GLSL是运行在GPU上的着色器语言 GLSL有自己的语法,跟js有些不同. GLSL是一个强类型的语言,所以在写着器语言时,必须要用强类型,强类型,强类型,强类型 GLSL是着色器 ...
- 【Quartz.NET】Quartz.NET 入门
概述 Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等. Quartz.NET允许开发人员根据时间间隔(或天)来调度作业.它实现了 ...
- 插件-监控页面加载之loading
查看效果点https://icedjuice.github.io/plug-in/loading/loading.html 简单易用的loading插件,该插件并不是真正的监控页面的资源加载过程,而是 ...
- Day21-自定义分页
一. 先简单来个示例 1.1 在urls.py中增加1条,user_list from django.conf.urls import url,include from django.contrib ...
- CentOS 7下安装pptp服务端手记 ok
主要配置步骤 1. 安装前检查系统支持 2. 安装必要包 3. 修改相关配置文件 4. 设置开机自动启动 pptpd, iptables 5. iptables配置网络 6. 阿里云ECS可能还需要几 ...
- 【JavaScript】BOM
一.前言 接着前一章的内容,继续Js的学习. 二.内容 window对象 //确定窗口位置 var leftPos = (typeof window.screenLeft == &quo ...