loj2141 「SHOI2017」期末考试
我们枚举每一个时间点,使得所有科目的时间都小于等于这个时间点,计算安排老师的代价和学生们的不满意度更新答案。
但是枚举太慢了,可以发现,时间点越早,学生们不满意度越小,安排老师的代价越高。即安排老师的代价、学生们的不满意度和时间点的关系一个是负相关一个是正相关的。
因此,安排老师的代价、学生们的不满意度的和是一个以时间点为 \(x\) 轴的凹函数,三分。
#include <algorithm>
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
int A, B, n, m, t[100005], b[100005];
ll C, ans=0x3f3f3f3f3f3f3f3f, ove, lwr;
ll chk(int lim){
ll re=0;
ove = lwr = 0;
for(int i=1; i<=m; i++)
if(b[i]>lim)
ove += (ll)b[i] - lim;
else
lwr += (ll)lim - b[i];
if(A<=B){
int tmp=min(lwr, ove);
lwr -= tmp;
ove -= tmp;
re += (ll)tmp * A;
re += (ll)ove * B;
}
else re = ove * B;
for(int i=1; i<=n; i++)
if(lim>t[i])
re += (ll)(lim - t[i]) * C;
return re;
}
ll sanfen(){
int l=0, r=100000, midl, midr, dis;
while(l<=r){
dis = (r - l + 1) / 3;
midl = l + dis;
midr = l + dis + dis;
ll re1=chk(midl), re2=chk(midr);
ans = min(ans, re1);
ans = min(ans, re2);
if(re1>re2) l = midl + 1;
else r = midr - 1;
}
return ans;
}
int main(){
cin>>A>>B>>C>>n>>m;
//C too large
int minn=0x3f3f3f3f;
for(int i=1; i<=n; i++){
scanf("%d", &t[i]);
minn = min(minn, t[i]);
}
for(int i=1; i<=m; i++)
scanf("%d", &b[i]);
if(C>200000){
cout<<chk(minn)<<endl;
}
else
cout<<sanfen()<<endl;
return 0;
}
[\(\mathrm{O}(n)\)]做法](http://blog.csdn.net/sdfzyhx/article/details/70597948)
loj2141 「SHOI2017」期末考试的更多相关文章
- LOJ #2141. 「SHOI2017」期末考试
题目链接 LOJ #2141 题解 据说这道题可以三分(甚至二分)? 反正我是枚举的 = = 先将t和b数组排序后计算出前缀和, 然后枚举最晚的出成绩时间,每次可以O(1)直接计算调整到该时间所需的代 ...
- loj #2143. 「SHOI2017」组合数问题
#2143. 「SHOI2017」组合数问题 题目描述 组合数 Cnm\mathrm{C}_n^mCnm 表示的是从 nnn 个互不相同的物品中选出 mmm 个物品的方案数.举个例子, 从 ...
- 【LOJ 2145】「SHOI2017」分手是祝愿
LOJ 2145 100pts 这题...BT啊 首先我们很容易想出\(dp(msk)\)表示现在灯开关的情况是\(msk\),期望通过多少步走到终结态. 很明显\(dp(msk)=\frac{1}{ ...
- 【LOJ 2144】「SHOI2017」摧毁「树状图」
LOJ 2144 84pts 首先\(op2\)很简单.直接并查集一搞就好了(话说我现在什么东西都要写个并查集有点...) 然后\(op0\)我不会,就直接\(O(n^2)\)枚举一下\(P\)这个人 ...
- LOJ #2142. 「SHOI2017」相逢是问候(欧拉函数 + 线段树)
题意 给出一个长度为 \(n\) 的序列 \(\{a_i\}\) 以及一个数 \(p\) ,现在有 \(m\) 次操作,每次操作将 \([l, r]\) 区间内的 \(a_i\) 变成 \(c^{a_ ...
- LOJ #2145. 「SHOI2017」分手是祝愿
题目链接 LOJ #2145 题解 一道画风正常的--期望DP? 首先考虑如何以最小步数熄灭所有灯:贪心地从大到小枚举灯,如果它亮着则修改它.可以求出总的最小步数,设为\(cnt\). 然后开始期望D ...
- loj2145 「SHOI2017」分手是祝愿
记 \(f_i\) 是从要做 \(i\) 步好操作变成要做 \(i-1\) 步好操作的期望操作次数. 显然 \(f_i=i/n \times 1 + (1-i/n) \times (1 + f_{i+ ...
- loj2143 「SHOI2017」组合数问题
大傻逼题--就是求 \(nk\) 个元素选出一些元素,选出的元素的个数要满足模 \(k\) 余 \(r\),求方案数. 想到 \(\binom{n}{m}=\binom{n-1}{m-1}+\bino ...
- BZOJ4868:[SHOI2017]期末考试——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=4868 题目复制于洛谷:https://www.luogu.org/problemnew/show/P ...
随机推荐
- 创建Maven项目出错 pom出错
错误为 org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.a ...
- php出现Warning: file_put_contents,failed to open stream
Warning: file_put_contents(D:/wwwroot/jinxiongdi/web/temp/caches/f/index_40F756F0.php) [function.fil ...
- Java编程基础-方法
1.方法(函数)概要 (1).含义:方法(函数)就是定义在类中的具有特定功能的一段独立小程序. (2).方法定义的语法格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参 ...
- OC 思维导向图
iOS 扩展思维导向图,如下图所示:
- mybatis 部署日志
<!-- 打印查询语句 --> <setting name="logImpl" value="STDOUT_LOGGING" /> &l ...
- php 正则符号说明
preg_match_all ("/<b>(.*)<\/b>/U", $userinfo, $pat_array); preg_match_all (&qu ...
- js 上传图片
<div class="block-input" style="height: 90px"> <span><i class=&qu ...
- 2018 北京区域赛 I - Palindromes (找规律)
题目 HihoCoder - 1878 题目大意 给出k,让求出第k个回文数(k的“长度”不超过1e5) 题解 之前做过类似的题,是统计各阶段的数找到第K个回文数,但这里K太大,需要寻找新的方法. 打 ...
- gcc, g++ - GNU 工程的 C 和 C++ 编译器 (egcs-1.1.2)
总览 (SYNOPSIS) gcc [ option | filename ]... g++ [ option | filename ]... 警告 (WARNING) 本手册页 内容 摘自 GNU ...
- WPF知识点全攻略03- XAML
XAML 是一种声明性标记语言,XAML 是一种基于 XML 并对 XML 结构规则进行了扩展. XAML特点: 定义应用程序的界面元素 显示的声明WPF资源(样式.模板.动画等) 可扩展性(自定义U ...