[luogu] P3745 [六省联考2017]期末考试 (贪心)
P3745 [六省联考2017]期末考试
题目描述
有 \(n\) 位同学,每位同学都参加了全部的 \(m\) 门课程的期末考试,都在焦急的等待成绩的公布。
第 \(i\) 位同学希望在第 \(t_i\) 天或之前得知所有课程的成绩。如果在第 \(t_i\) 天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程公布成绩,每等待一天就会产生 \(C\) 不愉快度。
对于第 \(i\) 门课程,按照原本的计划,会在第 \(b_i\) 天公布成绩。
有如下两种操作可以调整公布成绩的时间:
- 将负责课程 \(X\) 的部分老师调整到课程 \(Y\),调整之后公布课程 \(X\) 成绩的时间推迟一天,公布课程 \(Y\) 成绩的时间提前一天;每次操作产生 \(A\) 不愉快度。
- 增加一部分老师负责学科 \(Z\),这将导致学科 \(Z\) 的出成绩时间提前一天;每次操作产生 \(B\) 不愉快度。
上面两种操作中的参数 \(X, Y, Z\) 均可任意指定,每种操作均可以执行多次,每次执行时都可以重新指定参数。
现在希望你通过合理的操作,使得最后总的不愉快度之和最小,输出最小的不愉快度之和即可。
输入输出格式
输入格式:
第一行三个非负整数 \(A, B, C\),描述三种不愉快度,详见【题目描述】;
第二行两个正整数 \(n, m\),分别表示学生的数量和课程的数量;
第三行 \(n\) 个正整数 \(t_i\),表示每个学生希望的公布成绩的时间;
第四行 \(m\) 个正整数 \(b_i\),表示按照原本的计划,每门课程公布成绩的时间。
输出格式:
输出一行一个整数,表示最小的不愉快度之和。
输入输出样例
输入样例#1: 复制
100 100 2
4 5
5 1 2 3
1 1 2 3 3
输出样例#1: 复制
6
输入样例#2: 复制
3 5 4
5 6
1 1 4 7 8
2 3 3 1 8 2
输出样例#2: 复制
33
说明
【样例 1 说明】
由于调整操作产生的不愉快度太大,所以在本例中最好的方案是不进行调整; 全部
5 的门课程中,最慢的在第 3 天出成绩;
同学 1 希望在第 5 天或之前出成绩,所以不会产生不愉快度;
同学 2 希望在第 1 天或之前出成绩,产生的不愉快度为 (3 − 1) ∗ 2 = 4;
同学 3 希望在第 2 天或之前出成绩,产生的不愉快度为 (3 − 2) ∗ 2 = 2;
同学 4 希望在第 3 天或之前出成绩,所以不会产生不愉快度;
不愉快度之和为 4 + 2 = 6 。

题解
整个题目的贪心在于如何处理\(A<B\),因为,\(A\)的使用会伴随着一门科目的推迟,也就是说\(A\)的使用次数是有限的。
注意到整个题目的意思就是要我们提前天数,那么我们可以考虑枚举天数,网上使用三分和二分的大佬们实在是太巨辣,我只会\(O(n)\)。
那么当\(A<B\)的时候,我们就根据天数的推移用前缀和统计一下能有几天可以推迟,然后计算\(A\)使用的次数,不够的再用\(B\)提前。
整个难点就在于学生和科目随时间的线性变化,要自己理一理。
我们用一个桶记录学生忍耐的时间,另一个记录科目出成绩的时间。
那么随时间线性变化便是,
每往后一天,记录这天前有多少科目是可以推迟的,对于推迟的贡献,
有多少学生是开始忍耐不了的。
有多少科目是还需要提前的,对于提前一共要多少天。
自己好好想一下。不懂可以看代码。
Code
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#define ll unsigned long long
using namespace std;
const ll MAXN=1e6+5;
ll a,b,c,n,m,N,M,sum,ans=1e18,tot;
ll ti[MAXN],bi[MAXN],bac1[MAXN],bac2[MAXN];
ll s,ss,tt,t1,t2,t3;
ll read(){
ll x=0,w=1;char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*w;
}
int main(){
a=read();b=read();c=read();
n=read();t2=m=read();
for(ll i=1;i<=n;i++)ti[i]=read(),bac1[ti[i]]++;
for(ll i=1;i<=m;i++)bi[i]=read(),bac2[bi[i]]++,ss+=bi[i];
for(ll i=1;i<=100000;i++){
//tt当前不能忍受的人的天数,ss当前需要提前的天数,s是当前可以做贡献的天数
tt+=bac1[i-1]+t1;t1+=bac1[i-1];
t2-=bac2[i];ss-=bac2[i]+t2;
s+=bac2[i-1]+t3;t3+=bac2[i-1];
sum=tt*c;tot=0;
if(a<b){
tot=min(ss,s);sum+=min(ss,s)*a;
}
sum=sum+max((ss-tot),(ll)0)*b;
ans=min(ans,sum);
}
cout<<ans<<endl;
return 0;
}
[luogu] P3745 [六省联考2017]期末考试 (贪心)的更多相关文章
- 洛谷 P3745 [六省联考2017]期末考试
题目描述 有 nnn 位同学,每位同学都参加了全部的 mmm 门课程的期末考试,都在焦急的等待成绩的公布. 第 iii 位同学希望在第 tit_iti 天或之前得知所有课程的成绩.如果在第 tit_ ...
- 洛谷P3745 [六省联考2017]期末考试
传送门 题解 //Achen #include<algorithm> #include<iostream> #include<cstring> #include&l ...
- 【BZOJ4868】[六省联考2017]期末考试(贪心)
[BZOJ4868][六省联考2017]期末考试(贪心) 题面 BZOJ 洛谷 题解 显然最终的答案之和最后一个公布成绩的课程相关. 枚举最后一天的日期,那么维护一下前面有多少天可以向后移,后面总共需 ...
- [BZOJ4868][六省联考2017]期末考试(三分)
4868: [Shoi2017]期末考试 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 964 Solved: 439[Submit][Status ...
- 题解 洛谷P3745 【[六省联考2017]期末考试】
这题有点绕,我写了\(2h\)终于搞明白了. 主要思路:枚举最晚公布成绩的时间\(maxt\),然后将所有公布时间大于\(maxt\)的课程都严格降为\(maxt\)即可. 在此之前,还要搞清楚一个概 ...
- bzoj千题计划262:bzoj4868: [六省联考2017]期末考试
http://www.lydsy.com/JudgeOnline/problem.php?id=4868 假设 最晚出成绩的是第i天 预处理 cnt[i] 表示 有多少个学生 期望出成绩的那一天 &l ...
- 2017 [六省联考] T1 期末考试
4868: [Shoi2017]期末考试 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 842 Solved: 385[Submit][Status ...
- BZOJ 4872 luogu P3750 [六省联考2017]分手是祝愿
4872: [Shoi2017]分手是祝愿 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description ...
- luogu P3750 [六省联考2017]分手是祝愿
luogu loj 可以发现在最优策略中,每种操作最多只会做一次,并且操作的先后顺序并不会影响答案,所以考虑从后往前扫,碰到一个\(1\)就对这个位置\(i\)进行操作,这样的操作一定是最优策略.记最 ...
随机推荐
- xunsearch实战经验总结
一.定义好配置文件(非常关键) a):如果需要做精确搜索建议对字段设定index=self,tokenizer = full,不然xunsearch会对字段做分词处理: b):数字区间搜索需设定 ty ...
- js实现本地的图片压缩上传预览
js在设计时考虑到安全的原因是不允许读写本地文件的,随着html5的出现提供了fileReader AP从而可以I实现本地图片的读取预览功能, 另外在移动端有的限制图片大小的需求,主要是考虑图片过大会 ...
- 计算机网络系统--Microsoft Lync 与 腾讯通RTX 对比(转载)
原文网址: http://it.vsharing.com/226.html ------------------------------- 上海大学统一通信平台现在尚未实施,一直在测试微软的Lync. ...
- [BZOJ 3884][欧拉定理]上帝与集合的正确使用方法
看看我们机房某畸形写的题解:http://blog.csdn.net/sinat_27410769/article/details/46754209 此题为popoQQQ神犇所出,在此orz #inc ...
- Nginx系列(三)--管理进程、多工作进程设计
Nginx由一个master进程和多个worker进程组成,但master进程或者worker进程中并不会再创建线程. 一.master进程和worker进程的作用 master进程 不须要处理网络事 ...
- c10---多文件开发
a.h // // lisi.h // 注意: .h是专门用来被拷贝的, 不会参与编译 #ifndef day05_lisi_h #define day05_lisi_h int sum(int v1 ...
- angularjs1-过滤器
<!DOCTYPE html> <html> <body> <header> <meta http-equiv="Content-Typ ...
- 0x41 并查集
太菜了才做到并查集啊啊啊啊啊啊啊啊啊啊啊 还是很有收获的说 水 bzoj4195: [Noi2015]程序自动分析 好题 poj1456 感受到并查集传递性的美妙啊!对于一个商品,去找他过期前那天的集 ...
- HTML5学习笔记(四):关于表格
在一个实例中碰到表格,总结下,先上代码,例: <table border="1"> <thead> <th>表头</th> < ...
- windows安装gnvm安装教程,node多版本解决方案
本文是实现windows下node多版本管理 Win10专业版 一.安装前准备 安装前请卸载node相关的所有东西!!! 二.gnvm下载 gnvm搜索 http://ksria.com/gnvm/ ...