bzoj千题计划262:bzoj4868: [六省联考2017]期末考试
http://www.lydsy.com/JudgeOnline/problem.php?id=4868
假设 最晚出成绩的是第i天
预处理 cnt[i] 表示 有多少个学生 期望出成绩的那一天 <i
sum[i] 表示 对应cnt[i] 那些学生 的 t 之和
比如 i=5,有4个学生 期望1 2 4 8 出成绩,那么 sum[5]=1+2+4=7,cnt[5]=3
假设 最晚出成绩的是第i天
学生的不愉悦度= (cnt[i]*i-sum[i])*C
类似的方法,算出 当前i下,能提前 某些 科目多少天,能推迟某些科目多少天
more_cnt[i] 表示有多少个科目 期望出成绩的那一天 >i
more_sum[i] 表示 对应more_cnt[i]那些科目的 b 之和
less_cnt[i] 表示有多少个科目 期望出成绩的那一天 <i
less_sum[i] 表示 对less_cnt[i]那些科目的 b 之和
需要提前的总天数=more_sum[i]-more_cnt[i]*i,记为need
可以推迟的总天数=less_cnt[i]*i-less_sum[i],记为have
如果B<=A,那就只 提前,不愉悦度为need*B
如果A<=B,看看可以推迟的 天数 是否>=要 提前的天数
如果>=,那就只 用A,不愉悦度为 need*A
否则,能用A的用A,剩下的用B,不愉悦度为 have*A + (need-have)*B
在预处理出那些数组后,所有的计算都是O(1)的,总时间复杂度为O(n)
三分可以把求解过程优化到 logn
注意有C=1e16,直接乘的话会爆long long
这种情况下一定是 提前科目出成绩的时间,特判即可
考试的时候,特判错了,丢了10分,w(゚Д゚)w
C=1e16,直接学生不愉悦度为 inf,应该是 最晚时间早于所有的期望时间,不愉悦度为0,其余的是inf啊啊啊啊
#include<cstdio>
#include<iostream> using namespace std; #define N 100001 #define min(a,b) ((a)<(b) ? (a) : (b))
#define max(a,b) ((a)>(b) ? (a) : (b)) typedef long long LL; int t[N],b[N];
//subject
int less_cnt[N],more_cnt[N];
LL less_sum[N],more_sum[N]; //student
int cnt[N];
LL sum[N]; template<typename T>
void read(T &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} int main()
{
freopen("exam.in","r",stdin);
freopen("exam.out","w",stdout);
int A,B,n,m;
LL C;
read(A); read(B); read(C);
read(n); read(m);
int x,mx=;
for(int i=;i<=n;++i)
{
read(x);
t[x]++;
}
for(int i=;i<=m;++i)
{
read(x);
b[x]++;
mx=max(mx,x);
}
for(int i=mx-;i;--i)
{
more_cnt[i]=more_cnt[i+]+b[i+];
more_sum[i]=more_sum[i+]+1LL*b[i+]*(i+);
}
for(int i=;i<=mx;++i)
{
cnt[i]=cnt[i-]+t[i-];
sum[i]=sum[i-]+1LL*t[i-]*(i-);
less_cnt[i]=less_cnt[i-]+b[i-];
less_sum[i]=less_sum[i-]+1LL*b[i-]*(i-);
}
LL student,subject;
LL ans=1e18;
LL have,need;
for(int i=;i<=mx;++i)
{
if(C<1e16) student=(1LL*cnt[i]*i-sum[i])*C;
else
{
if(1LL*cnt[i]*i-sum[i]) student=1e18;
else student=;
}
if(B<=A) subject=(more_sum[i]-1LL*more_cnt[i]*i)*B;
else
{
have=1LL*less_cnt[i]*i-less_sum[i];
need=more_sum[i]-1LL*more_cnt[i]*i;
if(have>=need) subject=need*A;
else subject=have*A+(need-have)*B;
}
ans=min(ans,student+subject);
}
cout<<ans;
return ;
}


bzoj千题计划262:bzoj4868: [六省联考2017]期末考试的更多相关文章
- [BZOJ4868][六省联考2017]期末考试(三分)
4868: [Shoi2017]期末考试 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 964 Solved: 439[Submit][Status ...
- 【BZOJ4868】[六省联考2017]期末考试(贪心)
[BZOJ4868][六省联考2017]期末考试(贪心) 题面 BZOJ 洛谷 题解 显然最终的答案之和最后一个公布成绩的课程相关. 枚举最后一天的日期,那么维护一下前面有多少天可以向后移,后面总共需 ...
- [luogu] P3745 [六省联考2017]期末考试 (贪心)
P3745 [六省联考2017]期末考试 题目描述 有 \(n\) 位同学,每位同学都参加了全部的 \(m\) 门课程的期末考试,都在焦急的等待成绩的公布. 第 \(i\) 位同学希望在第 \(t_i ...
- 洛谷 P3745 [六省联考2017]期末考试
题目描述 有 nnn 位同学,每位同学都参加了全部的 mmm 门课程的期末考试,都在焦急的等待成绩的公布. 第 iii 位同学希望在第 tit_iti 天或之前得知所有课程的成绩.如果在第 tit_ ...
- 题解 洛谷P3745 【[六省联考2017]期末考试】
这题有点绕,我写了\(2h\)终于搞明白了. 主要思路:枚举最晚公布成绩的时间\(maxt\),然后将所有公布时间大于\(maxt\)的课程都严格降为\(maxt\)即可. 在此之前,还要搞清楚一个概 ...
- 洛谷P3745 [六省联考2017]期末考试
传送门 题解 //Achen #include<algorithm> #include<iostream> #include<cstring> #include&l ...
- 2017 [六省联考] T1 期末考试
4868: [Shoi2017]期末考试 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 842 Solved: 385[Submit][Status ...
- 六省联考2017 Day1
目录 2018.3.18 Test T1 BZOJ.4868.[六省联考2017]期末考试 T2 T3 BZOJ.4870.[六省联考2017]组合数问题(DP 矩阵快速幂) 总结 考试代码 T1 T ...
- 【BZOJ4873】[六省联考2017]寿司餐厅(网络流)
[BZOJ4873][六省联考2017]寿司餐厅(网络流) 题面 BZOJ 洛谷 题解 很有意思的题目 首先看到答案的计算方法,就很明显的感觉到是一个最大权闭合子图. 然后只需要考虑怎么构图就行了. ...
随机推荐
- .Net Core 分布式微服务框架介绍 - Jimu
系列文章 .Net Core 分布式微服务框架介绍 - Jimu .Net Core 分布式微服务框架 - Jimu 添加 Swagger 支持 一.前言 近些年一直浸淫在 .Net 平台做企业应用开 ...
- [环境配置]Ubuntu 16.04 源码编译安装OpenCV-3.2.0+OpenCV_contrib-3.2.0及产生的问题
1.OpenCV-3.2.0+OpenCV_contrib-3.2.0编译安装过程 1)下载官方要求的依赖包 GCC 4.4.x or later CMake 2.6 or higher Git GT ...
- python图像处理 模式转化简单总结
图像处理库PIL有九种不同模式:1,L,P,RGB,RGBA,CMYK,YCbCr,I,F 1.模式“1” 模式“1”为二值图像,非黑即白.但是它每个像素用8个bit表示,0表示黑,255表示白. 2 ...
- 安装logstash及logstash的初步使用-处理DNS日志
安装logstash 需要高版本的java 使用1.4版本的java会有报错 # Can't start up: not enough memory 查询java信息 rpm -qa | grep j ...
- PAT甲题题解-1128. N Queens Puzzle (20)-做了一个假的n皇后问题
博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789810.html特别不喜欢那些随便转载别人的原创文章又不给 ...
- 作业三:LINUX内核的启动过程
作业三:LINUX内核的启动过程 一.使用GDB跟踪内核从start_kernel到init进程启动(附实验截图) (一)使用自己的Linux系统环境搭建MenuOS的过程 下载内核源代码编译内核 c ...
- 《Linux内核分析与设计实现》读书笔记一
第一章 Linux内核简介 1.1 Unix的历史 Unix的特点: Unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的: 在Unix中,所有的东西都被当做文件对待. Unix的内核和 ...
- ios UnitTest 学习笔记
一.运行第一个单元测试: 1.在Xcode 5中新建一个工程默认自带一个单元测试的文件夹,IDE自动生成了一个实现XCTestCase的.m文件,里面有一个失败测试(早期版本中实现的是SenTestC ...
- “数学口袋精灵”App的第二个Sprint计划----开发日记
一.现状 在第一个sprint计划中,我们已经初步完成了“数学口袋精灵”App的基本框架,现在我们要继续完善app,使其功能更加强大,界面更加有趣. 二.任务认领 完成界面后的后续任务: 冯美欣:欢迎 ...
- Alpha冲刺-第一天
1.1 今日完成任务情况以及遇到的问题. 完成任务情况 杜世康:弹幕的爬取 刘丹,李玉莹:系统统计功能实现 曹莹雯,尹楠: 主播管理功能实现 王静雅 :团队编码规范说明与本次博文撰写 遇到的问题 在爬 ...