BZOJ 4868 [Shoi2017]期末考试 ——三分 枚举
考场上xjb三分过掉了。
然后$sdfzyhx$、$silvernebula$ $O(n)$虐掉了。
我还是太菜了
#include <cstdio>
#include <cmath>
#include <queue>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define inf 10000000LL
#define llinf 10000000000000000LL
#define maxn 100005 void Finout()
{
freopen("exam.in","r",stdin);
freopen("exam.out","w",stdout);
} int n,m,t[maxn],b[maxn];
ll A,B,C; namespace Subtask1{
ll cal(int mid)
{
ll ret=0,cnt0=0,cnt1=0;
F(i,1,n) ret+=max((mid-t[i])*C,0LL);
F(i,1,m)
{
if (b[i]<=mid) cnt0+=mid-b[i];
else cnt1+=b[i]-mid;
}
if (A>=B) ret+=cnt1*B;
else
{
if (cnt0>=cnt1) ret+=cnt1*A;
else ret+=cnt0*A+(cnt1-cnt0)*B;
}
return ret;
}
void solve()
{
int l=0,r=0;
F(i,1,m) r=max(r,b[i]);
while (r-l>=4)
{
int m1=(l+r)/2,m2=(l+r)/2+1;
if (cal(m1)>cal(m2)) l=m1;
else r=m2;
}
ll ans=llinf; F(i,l,r) ans=min(ans,cal(i));
printf("%lld\n",ans);
}
} namespace Subtask2{
void solve()
{
ll ret=0,cnt0=0,cnt1=0,mini=llinf;
F(i,1,n) mini=min(mini,1LL*t[i]);
F(i,1,m)
{
if (b[i]<=mini) cnt0+=mini-b[i];
else cnt1+=b[i]-mini;
}
if (A>=B) ret+=cnt1*B;
else
{
if (cnt0>=cnt1) ret+=cnt1*A;
else ret+=cnt0*A+(cnt1-cnt0)*B;
}
printf("%lld\n",ret);
}
} int main()
{
scanf("%lld%lld%lld",&A,&B,&C);
scanf("%d%d",&n,&m);
F(i,1,n) scanf("%d",&t[i]);
F(i,1,m) scanf("%d",&b[i]);
if (C>=inf) Subtask2::solve();
else Subtask1::solve();
fclose(stdin);
fclose(stdout);
}
BZOJ 4868 [Shoi2017]期末考试 ——三分 枚举的更多相关文章
- bzoj 4868: [Shoi2017]期末考试
Description 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天 或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有 ...
- BZOJ-1- 4868: [Shoi2017]期末考试-三分
三分出成绩时间,假设当前出成绩最优,那么提前就会调增老师,增加不愉快度多于少等待的:如果延迟时间. 那么等待更久,增加的不愉快度也将多余少调增剩省下的. 于是:对于当前点,两边都是有单调性的. 就是说 ...
- [BZOJ4868][六省联考2017]期末考试(三分)
4868: [Shoi2017]期末考试 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 964 Solved: 439[Submit][Status ...
- bzoj4868: [Shoi2017]期末考试(三分法)
4868: [Shoi2017]期末考试 题目:传送门 题解: Get到一个新姿势...三分法 一开始百度百科的时候下了一跳...中国...的根??? 学懂了之后其实运用起来就根二分差不多啊,不过证明 ...
- NC20439 [SHOI2017]期末考试
NC20439 [SHOI2017]期末考试 题目 题目描述 有 \(n\) 位同学,每位同学都参加了全部的 \(m\) 门课程的期末考试,都在焦急的等待成绩的公布.第 \(i\) 位同学希望在第 \ ...
- BZOJ4868:[SHOI2017]期末考试——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=4868 题目复制于洛谷:https://www.luogu.org/problemnew/show/P ...
- [SHOI2017]期末考试
题目描述 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布. 第i位同学希望在第ti天或之前得知所有课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最 ...
- 【bzoj4868】[Shoi2017]期末考试 前缀和+暴力
题目描述 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待 ...
- [bzoj4868][Shoi2017]期末考试
来自FallDream 的博客,未经允许,请勿转载,谢谢. 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天或之前得知所.有.课程的成绩.如果在 ...
随机推荐
- [学习笔记] C++ 历年试题解析(一)--判断题
少说话.. 程序题链接:https://www.cnblogs.com/aoru45/p/9898691.html 14级试题---选择题 1. 引用在声明时必须对其初始化,以绑定某个已经存在的变量( ...
- python零基础学习开篇
我是某工业大学的一名博士,研究方向是基于人脸的模式识别.很遗憾,毕业后没有继续从事图像处理中模式识别相关研究.多种原因进入了一家国企单位,从事交通方面工作.工作2年中一直迷茫,没有在工作岗位中找到自己 ...
- event loop、进程和线程、任务队列
本文原链接:https://cloud.tencent.com/developer/article/1106531 https://cloud.tencent.com/developer/articl ...
- 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3
[程序介绍]免费开源的 文件 MD5 SHA1 SHA256 SHA512 校验码生成工具 V1.3 这是一个有意思的程序,同一个程序,即是图形程序,又是命令行程序.程序作用:输入一个文件的路径,输出 ...
- 重新postgresql出现错误:Problem running post-install step. Installation may not complete correctly. The database cluster initialisation failed.
以前正常使用的postgresql,今天出现问题:报*.dll错误.百度了一下,只能重新安装 . 在重新安装过程中报:Problem running post-install step. Instal ...
- inner join 和 left join 的区别
1.left join.right join.inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表 ...
- d3.js--03(增删改查)
选择元素 d3.select():是选择所有指定元素的第一个 d3.selectAll():是选择指定元素的全部 插入元素 append():在选择集末尾插入元素 insert():在选择集前面插入元 ...
- 微信小程序传值取值的几种方法
一,列表index下的取值 实现方式是:data-index="{{index}}"挖坑及e.currentTarget.dataset.index来填坑即可 1.1生成值 < ...
- 【转】Windows 邮件槽(MailSlot)
Windows 邮件槽(MailSlot) 来自<Windows网络编程第二版 中文版> 优点:通过网络,将一条消息广播给一台或多台计算机. 缺点:只允许从客户机到服务器,建立一种不可 ...
- c++ 用指针操作数组
#include <iostream> using namespace std; const int Max = 5; double * fill_array(double * first ...