Time Limit: 20 Sec  Memory Limit: 512 MB
Submit: 936  Solved: 426
[Submit][Status][Discuss]

Description

有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布。第i位同学希望在第ti天
或之前得知所.有.课程的成绩。如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程
公布成绩,每等待一天就会产生C不愉快度。对于第i门课程,按照原本的计划,会在第bi天公布成绩。有如下两种
操作可以调整公布成绩的时间:1.将负责课程X的部分老师调整到课程Y,调整之后公布课程X成绩的时间推迟一天
,公布课程Y成绩的时间提前一天;每次操作产生A不愉快度。2.增加一部分老师负责学科Z,这将导致学科Z的出成
绩时间提前一天;每次操作产生B不愉快度。上面两种操作中的参数X,Y,Z均可任意指定,每种操作均可以执行多次
,每次执行时都可以重新指定参数。现在希望你通过合理的操作,使得最后总的不愉快度之和最小,输出最小的不
愉快度之和即可

Input

第一行三个非负整数A,B,C,描述三种不愉快度,详见【问题描述】;
第二行两个正整数n,m(1≤n,m≤105),分别表示学生的数量和课程的数量;
第三行n个正整数ti,表示每个学生希望的公布成绩的时间;
第四行m个正整数bi,表示按照原本的计划,每门课程公布成绩的时间。
1<=N,M,Ti,Bi<=100000,0<=A,B,C<=100000

Output

输出一行一个整数,表示最小的不愉快度之和。

Sample Input

100 100 2
4 5
5 1 2 3
1 1 2 3 3

Sample Output

6
由于调整操作产生的不愉快度太大,所以在本例中最好的方案是不进行调整; 全部
5 的门课程中,最慢的在第 3 天出成绩;
同学 1 希望在第 5 天或之前出成绩,所以不会产生不愉快度;
同学 2 希望在第 1 天或之前出成绩,产生的不愉快度为 (3 - 1) * 2 = 4;
同学 3 希望在第 2 天或之前出成绩,产生的不愉快度为 (3 - 2) * 2 = 2;
同学 4 希望在第 3 天或之前出成绩,所以不会产生不愉快度;
不愉快度之和为 4 + 2 = 6 。

HINT

存在几组数据,使得C = 10 ^ 16

Source

黑吉辽沪冀晋六省联考

考场上还是静不下心来

总感觉这题是个dp

然后直接弃掉了。

其实还是挺简单的。

我们钦定一个试卷被批完的最晚时间

然后通过二分+前缀和计算出学生的不愉快度

再利用二分+后缀和计算出让最后一个被批完的试卷的时间满足要求的不愉快的

两者求和取最小值就可以了

这道题的关键是看出学生不满意度和试卷被批完的时间之间的单调关系

然后要想到枚举时间

#include<cstdio>
#include<cmath>
#include<algorithm>
#define int unsigned long long
using namespace std;
const int MAXN=1e5+10;
const int INF=1e19;
inline int read()
{char c=getchar();int x=0,f=1;while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}return x*f;
}
int A,B,C;
int N,M;
int t[MAXN],b[MAXN];
int sumt[MAXN],sumb[MAXN];//t的前缀与b的后缀
int limit,ans=INF;
main()
{#ifdef WIN32freopen("a.in","r",stdin);#endifA=read();B=read();C=read();N=read();M=read();for(int i=1;i<=N;i++) t[i]=read();for(int i=1;i<=M;i++) b[i]=read(),limit=max(limit,b[i]);sort(t+1,t+N+1);sort(b+1,b+M+1);for(int i=1;i<=N;i++) sumt[i]=t[i]+sumt[i-1];for(int i=M;i>=1;i--) sumb[i]=b[i]+sumb[i+1];for(int i=1;i<=limit;i++){int l=1,r=N,ans1=0,ans2=0,now=0;while(l<=r){int mid=l+r>>1;if(t[mid]<i) ans1=mid,l=mid+1;else r=mid-1;}l=1,r=M;while(l<=r){int mid=l+r>>1;if(b[mid]>i) ans2=mid,r=mid-1;else l=mid+1;}if(ans1!=0) now+=(ans1*i-sumt[ans1])*C;if(ans2!=0) {int need=(sumb[ans2]-(M-ans2+1)*i);if(A>=B) now+=need*B;else{int have=(ans2-1)*i-(sumb[1]-sumb[ans2]);if(have>=need) now+=need*A;else now+=have*A+(need-have)*B;}}ans=min(ans,now);}printf("%lld",ans);return 0;
}

BZOJ4868: [Shoi2017]期末考试相关推荐

  1. BZOJ4868 Shoi2017期末考试(三分+贪心)

    容易想到枚举最晚发布成绩的课哪天发布,这样与ti和C有关的贡献固定.每门课要么贡献一些调节次数,要么需要一些调节次数,剩下的算贡献也非常显然.这样就能做到平方级别了. 然后大胆猜想这是一个凸函数三分就 ...

  2. 【bzoj4868】[Shoi2017]期末考试 前缀和+暴力

    题目描述 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待 ...

  3. 南昌大学计算机专业高数课本,南昌大学高等数学期末考试.pdf

    南昌大学2008学年第二学期高等数学期末考试试卷 ( 3 15 ) 一. 填空题 每空 分,共 分           a 3i  j  2k, b i  2j  k, ( ...

  4. 清华《摸鱼学导论》开班啦!1000多学子在线摸鱼,无期末考试

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 浩楠 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 什 ...

  5. 四川大学java试题_四川大学2013年计算机(软件)学院Java语言程序设计期末考试试题B卷...

    四川大学期末考试试题(闭卷) (2013 -2014学年第1学期) 课程号:课程名称: Java语言程序设计(B 卷)任课教师: 适用专业年级:学号:姓名: 一.单项选择题(本大题共20小题,每小题2 ...

  6. 计算机组装与维修是几级考试,计算机组装与维修期末考试试卷讲解学习.pdf

    学而不思则惘,思而不学则殆 组装与维修期末考试试卷 一.选择题 1.下列显卡接口中,能在一根线缆上同时传输高清晰.全数字的音频和视频信号的是() A .DVI B.S-VIDEO C .D-SUB D ...

  7. python期末考试试题

    python期末考试试题汇总 学习 2020-4-105589阅读 · 98喜欢 · 11评论 想个昵称憋一天 粉丝:370文章:31 关注 6.for i in range(2,n): if n%i ...

  8. 大一计算机期末考试高数试卷,高等数学大一期末试卷(A)及答案

    清华大学,高等数学,期末,考试,复习 清华大学 2011-2012学年第 一 学期期末考试试卷(A卷) 及参考解答与评分标准 考试科目: 高等数学A(上) 考试班级: 2009级工科各班 考试方式: ...

  9. 滨州学院计算机自荐考试题型,滨州学院2004—2005学年第一学期期末考试计算机科学教育专业02级《数据库原理》试题及答案(3份,另附习题集)...

    内容简介: 滨州学院2004-2005学年第一学期期末考试计算机科学教育专业02级<数据库原理>试题及答案(3份) <数据库原理>模拟试题一 一.选择题(每题1分,共5分) 1 ...

最新文章

  1. C++版数据结构继承关系图
  2. 模式识别之基础---常用分类算法特性归纳
  3. 【深度学习】去掉softmax后Transformer会更好吗?复旦华为诺亚提出SOFT:轻松搞定线性近似...
  4. 最简单的方式实现QML无边框窗口边缘拖动调整大小
  5. mysql自带命令使用教程_自用mysql自带命令实现数据库备份还原
  6. r k-means 分类结果_机器学习-Kmeans均值聚类算法(贪心学院)
  7. Git账号以及TortoiseGit配置
  8. 59 MM配置-后勤发票校验-维护税代码缺省值
  9. Vue本地图片循环加载显示不出来,vue img标签 :src地址拼接
  10. dateformat-参数表
  11. Git 图解、常用命令和廖雪峰教程笔记总结
  12. autojs 文件转base64
  13. 制作多媒体网页html代码,Director制作多媒体网页
  14. matlab加分号,matlab加分号
  15. JSON在JS中的应用
  16. 【转】常用单位换算表
  17. 戴尔游匣5577黑苹果EFI文件
  18. Android wear 睡眠追踪,为什么智能手表还不是最理想的睡眠追踪设备
  19. 9*9数独问题——深度搜索算法
  20. 深入理解空间金字塔池化(SPP,ASPP)

热门文章

  1. poj 2976 Dropping tests 01分数规划
  2. PHPExcel生成或读取excel文件
  3. Android开发之广播
  4. RIP juniper
  5. DBGridEh导出Excel等格式文件
  6. 花两个小时,做了个分页控件
  7. Java中int为什么占四个字节?
  8. locate: command not found updatedb: command not found
  9. 什么是软件测试,软件测试需要注意些什么?
  10. js define函数_不夸张,这真的是前端圈宝藏书!360前端工程师Vue.js源码解析