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 Standard的分布式自增ID算法--Snowflake代码实现
概述 上篇文章介绍了3种常见的Id生成算法,本篇主要介绍如何使用C#实现Snowflake. 基础字段 /// <summary> /// 工作节点Id(长度为5位) /// </s ...
- Python+Selenium+Unittest+Ddt+HTMLReport分布式数据驱动自动化测试框架结构
1.Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_pa ...
- iOS开发面试题整理
前言 本文借鉴整理了iOS高级开发常见的面试题,并且分博客一一分析,希望能和大家一起进步学习. 欢迎大家关注我的 Github
- 173. Insertion Sort List【LintCode by java】
Description Sort a linked list using insertion sort. Example Given 1->3->2->0->null, ret ...
- mui框架(二)
1.底部导航切换界面 HTML部分: <nav class="mui-bar mui-bar-tab"> <a id="defaultTab" ...
- Redis学习笔记之入门基础知识——简介
非关系型数据库,存储的数据类型:字符串(STRING).列表(LIST).集合(SET).散列表(HASH).有序集合(ZSET) 持久化:时间点转储(point-in-time-dump)(快照). ...
- Fibbing以让虚结点的设置更简单为目的优化网络需求
- Ns3 构建哑铃型拓扑,并实现两个点的TCP连接(详细请戳全文)
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAaUAAADlCAIAAAB8n38hAAAV8UlEQVR4nO3dMWjjyBoH8CkNj1uc5v
- C语言入门:03.关键字、标识符、注释
一.学习语法之前的提醒 (1)C语言属于一门高级语言,其实,所有高级语言的基本语法组成部分都是一样的,只是表现形式不太一样 (2)就好像亚洲人和非洲人,大家都有人类的结构:2只 手.2只脚.1个头,只 ...
- 小程序开发 绑定自定义数据data- 及JS获取
1wxml<!-- 茶系显示隐藏函数sectionSelect --><view class="img-fur" data-id="{{item.id} ...