我们枚举每一个时间点,使得所有科目的时间都小于等于这个时间点,计算安排老师的代价和学生们的不满意度更新答案。

但是枚举太慢了,可以发现,时间点越早,学生们不满意度越小,安排老师的代价越高。即安排老师的代价、学生们的不满意度和时间点的关系一个是负相关一个是正相关的。

因此,安排老师的代价、学生们的不满意度的和是一个以时间点为 \(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」期末考试的更多相关文章

  1. LOJ #2141. 「SHOI2017」期末考试

    题目链接 LOJ #2141 题解 据说这道题可以三分(甚至二分)? 反正我是枚举的 = = 先将t和b数组排序后计算出前缀和, 然后枚举最晚的出成绩时间,每次可以O(1)直接计算调整到该时间所需的代 ...

  2. loj #2143. 「SHOI2017」组合数问题

    #2143. 「SHOI2017」组合数问题   题目描述 组合数 Cnm\mathrm{C}_n^mC​n​m​​ 表示的是从 nnn 个互不相同的物品中选出 mmm 个物品的方案数.举个例子, 从 ...

  3. 【LOJ 2145】「SHOI2017」分手是祝愿

    LOJ 2145 100pts 这题...BT啊 首先我们很容易想出\(dp(msk)\)表示现在灯开关的情况是\(msk\),期望通过多少步走到终结态. 很明显\(dp(msk)=\frac{1}{ ...

  4. 【LOJ 2144】「SHOI2017」摧毁「树状图」

    LOJ 2144 84pts 首先\(op2\)很简单.直接并查集一搞就好了(话说我现在什么东西都要写个并查集有点...) 然后\(op0\)我不会,就直接\(O(n^2)\)枚举一下\(P\)这个人 ...

  5. LOJ #2142. 「SHOI2017」相逢是问候(欧拉函数 + 线段树)

    题意 给出一个长度为 \(n\) 的序列 \(\{a_i\}\) 以及一个数 \(p\) ,现在有 \(m\) 次操作,每次操作将 \([l, r]\) 区间内的 \(a_i\) 变成 \(c^{a_ ...

  6. LOJ #2145. 「SHOI2017」分手是祝愿

    题目链接 LOJ #2145 题解 一道画风正常的--期望DP? 首先考虑如何以最小步数熄灭所有灯:贪心地从大到小枚举灯,如果它亮着则修改它.可以求出总的最小步数,设为\(cnt\). 然后开始期望D ...

  7. loj2145 「SHOI2017」分手是祝愿

    记 \(f_i\) 是从要做 \(i\) 步好操作变成要做 \(i-1\) 步好操作的期望操作次数. 显然 \(f_i=i/n \times 1 + (1-i/n) \times (1 + f_{i+ ...

  8. loj2143 「SHOI2017」组合数问题

    大傻逼题--就是求 \(nk\) 个元素选出一些元素,选出的元素的个数要满足模 \(k\) 余 \(r\),求方案数. 想到 \(\binom{n}{m}=\binom{n-1}{m-1}+\bino ...

  9. BZOJ4868:[SHOI2017]期末考试——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=4868 题目复制于洛谷:https://www.luogu.org/problemnew/show/P ...

随机推荐

  1. DB2中横表纵表互换

    1.列转行:创建一个如下的表drop table dwtmp.tmp_xn_lsb; create table dwtmp.tmp_xn_lsb ( year      int ,quarter   ...

  2. jvm内存溢出的三种情况以及解决办法

    1       前言相信有一定java开发经验的人或多或少都会遇到OutOfMemoryError的问题,这个问题曾困扰了我很长时间,随着解决各类问题经验的积累以及对问题根源的探索,终于有了一个比较深 ...

  3. FTP上传下载 C#辅助类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.N ...

  4. JS权威指南-概述学习

    <script src="/javascripts/application.js" type="text/javascript" charset=&quo ...

  5. activity间的传参

    Intent有两个作用:激活组件和附带数据 激活另一个activity的方法显示意图:  1.  Intent intent = new Intent();       intent.setClass ...

  6. CPU性能的评价

    人们通常用benchmark 来衡量CPU的性能,常见的benchmark有dhrystone和coremark. 由于dhrystone 受编译器影响比较大,所以,结果不是很准确,现在大多采用cor ...

  7. 洛谷 P1996 约瑟夫问题

    题目背景 约瑟夫是一个无聊的人!!! 题目描述 n个人(n<=100)围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数,数到m的人再出圈,……依次类推,直到所有的人都出 ...

  8. UVA 11584 Partitioning by Palindromes 划分回文串 (Manacher算法)

    d[i]表示前面i个字符划分成的最小回文串个数, 转移:当第i字符加进来和前面区间j构成回文串,那么d[i] = d[j]+1. 要判断前面的字符j+1到i是不是回文串,可以用Manacher算法预处 ...

  9. 爬虫5_python2_使用 Beautiful Soup 解析数据

    使用 Beautiful Soup 解析数据(感谢东哥) 有的小伙伴们对写正则表达式的写法用得不熟练,没关系,我们还有一个更强大的工具,叫Beautiful Soup,有了它我们可以很方便地提取出HT ...

  10. QR 分解

    将学习到什么 介绍了平面旋转矩阵,Householder 矩阵和 QR 分解以入相关性质.   预备知识 平面旋转与 Householder 矩阵是特殊的酉矩阵,它们在建立某些基本的矩阵分解过程中起着 ...