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 ...
随机推荐
- qq登录,新浪微博登录接口申请过程中遇到的问题
接口申请下来了,开发很容易的,参数传到就可以了.以前就做过这方面的开发,但是申请还是第一次,网上有关这方面的东东不是很多,所以记录一下申请过程. 1,qq登录接口申请 申请地址是:http://con ...
- MYSQL5.7.11安装问题
今天下午在笔记本上安装MySQL软件.一开始下载的是最新版5.7.20-winx64.到了安装环节,各种报错,先是缺少什么DLL120,好吧,找到资源补丁下载,放到系统文件夹.以为OK了.再尝试,这次 ...
- Aop第一节
什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),可以说是OOP(Object-Oriented Programing,面向对象编程)的补充和完善.OOP引入 ...
- C# (Cookie)基本操作
在Common中新建一个CookieHelper,全局调用 using System; using System.Collections.Generic; using System.Linq; usi ...
- System.TypeInitializationException: 'The type initializer for 'MySql.Data.MySqlClient.Replication.ReplicationManager' threw an exception.'
下午在调试的时候报错数据库连接就报错我就很纳闷后面用原来的代码写发现还是报错 System.TypeInitializationException: 'The type initializer for ...
- 用python格式化小说txt
下载了<无人生还>的txt版.传到手机,发现阅读器识别得不够好. 原文格式如下: 第一章 一 沃格雷夫法官先生新近离任退休,现在正在头等车厢的吸烟室里,倚角而坐,一 边喷着雪茄烟,一边兴致 ...
- MYSQL 写入emoji表情字符处理
这个鬼emoji表情是4个字节,mysql使用的utf8编码,UTF8占3个字节,要存储那个emoji表情需要将mysql编码由UFT8改为UFT8的超集,utf8mb4; 改数据库编码容易引起大面的 ...
- 洛谷 P2483 [SDOI2010]魔法猪学院
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- kvc to nsdata
[NSKeyedArchiver archivedDataWithRootObject:arr]; [NSKeyedUnarchiver unarchiveObjectWithData: ...
- ndarray数组自动创建
为了实现某些运算,需要快速构造符合要求的大数组 Numpy函数生成的数组,如不指定类类型,几乎全为浮点型(arange除外,它是整形),因为科学计算中测量值,例如温度.长度,都是浮点数 import ...