[BZOJ 4868][SHOI&SXOI2017]期末考试(贪心)

Description

有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布。第i位同学希望在第ti天

或之前得知所.有.课程的成绩。如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程

公布成绩,每等待一天就会产生C不愉快度。对于第i门课程,按照原本的计划,会在第bi天公布成绩。有如下两种

操作可以调整公布成绩的时间:1.将负责课程X的部分老师调整到课程Y,调整之后公布课程X成绩的时间推迟一天

,公布课程Y成绩的时间提前一天;每次操作产生A不愉快度。2.增加一部分老师负责学科Z,这将导致学科Z的出成

绩时间提前一天;每次操作产生B不愉快度。上面两种操作中的参数X,Y,Z均可任意指定,每种操作均可以执行多次

,每次执行时都可以重新指定参数。现在希望你通过合理的操作,使得最后总的不愉快度之和最小,输出最小的不

愉快度之和即可

Solution

考试的时候并没有想到QAQ

正解应该是三分啦…但是直接枚举Deadline线性可做

具体实现见代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define MAXN 100005
#define INF 1e16
typedef long long LL;
using namespace std;
int n,m,a,b,c;
LL student[MAXN],course[MAXN];
int read()
{
    int x=0;char c=getchar();
    while(c<‘0‘||c>‘9‘)c=getchar();
    while(c>=‘0‘&&c<=‘9‘)x=x*10+c-‘0‘,c=getchar();
    return x;
}
int main()
{
    a=read(),b=read(),c=read(),n=read(),m=read();
    int day=0;LL cost=0,mov=0,left=0,ans;
    for(int i=1;i<=n;i++)
    {int t;t=read();student[t]++;day=max(day,t);}
    for(int i=1;i<=m;i++)
    {int t;t=read();course[t]++;day=max(day,t);}
    for(int i=1;i<=day;i++)
    {
        cost+=student[i]*(day-i);
        left+=course[i]*(day-i);
        student[i]+=student[i-1];//维护前缀和
        course[i]+=course[i-1];
    }
    ans=cost*c;
    for(int i=day-1;i>0;i--)
    {
        mov+=(m-course[i]);//在这天后完结的课需要向前移动一天
        left-=course[i];//前面的所有课程向后移动的范围减少了1天
        cost-=student[i];//减掉希望在这天以前完结的学生一天的不满意度
        if(c>=INF&&cost)continue;
        LL p=left>0?left:0;
        if(mov<p)p=mov;
        if(a<b)ans=min(ans,p*a+(mov-p)*b+cost*c);
        else ans=min(ans,mov*b+cost*c);
    }
    printf("%lld\n",ans);
    return 0;
} 
时间: 2024-10-06 01:53:57

[BZOJ 4868][SHOI&SXOI2017]期末考试(贪心)的相关文章

三分 BZOJ4868 [Sxoi2017] 期末考试

4868: [Sxoi2017]期末考试 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 605  Solved: 270[Submit][Status][Discuss] Description 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天 或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程 公布成绩,每等待一天就会产生C不愉快度.对

[六省联考2017]期末考试 贪心 枚举

题面 题面 题解 因为每个学生产生的代价其实只跟自身属性和最后一门成绩的公布时间相关, 所以考虑如果我们固定一个时间t作为最后一场,那么我们就可以快速算出此时的代价了. 首先在t之前的成绩都可以用来和在t后面的成绩多次配对进行第一种操作. 因此我们先贪心的进行第一种操作,能搞几次就搞几次,如果剩下还有在t后面的成绩,即再用第二种操作强行提前(如果第二种操作的代价比第一种操作低,那就将第一种操作的代价设为第二种操作的代价就可以保证结果正确性了) 而要算出这样决策的代价,我们只需要知道在t前面的成绩

bzoj 4868: [Shoi2017]期末考试

Description 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天 或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程 公布成绩,每等待一天就会产生C不愉快度.对于第i门课程,按照原本的计划,会在第bi天公布成绩.有如下两种 操作可以调整公布成绩的时间:1.将负责课程X的部分老师调整到课程Y,调整之后公布课程X成绩的时间推迟一天 ,公布课程Y成绩的时间提前一天:每次操作产生A不愉快

【BZOJ4868】期末考试 [三分][贪心]

期末考试 Time Limit: 20 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description Input Output Sample Input 100 100 2 4 5 5 1 2 3 1 1 2 3 3 Sample Output 6 HINT Solution 首先,由于学生需要知道所有的成绩,这意味着即使只有一个成绩不知道,代价也是要算的,那么显然答案只和所有成绩都发出的时间有关. 显然,如果我们知道了所有成绩都发

[luogu] P3745 [六省联考2017]期末考试 (贪心)

P3745 [六省联考2017]期末考试 题目描述 有 \(n\) 位同学,每位同学都参加了全部的 \(m\) 门课程的期末考试,都在焦急的等待成绩的公布. 第 \(i\) 位同学希望在第 \(t_i\)? 天或之前得知所有课程的成绩.如果在第 \(t_i\) 天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程公布成绩,每等待一天就会产生 \(C\) 不愉快度. 对于第 \(i\) 门课程,按照原本的计划,会在第 \(b_i\)? 天公布成绩. 有如下两种操作可以调整公布成绩的时间:

nyoj 757 期末考试【优先队列+贪心】

期末考试 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没 交作业就会扣期末成绩的分数,假设完成每门功课需要一天的时间,你能帮助小T扣除的分数最小吗? 输入 输入n,表示n门功课(n<2000),接下来n行,每行两个数a,b,分别表示交作业的最后期限,迟交扣除的分数.(以文件结尾) 输出 输出扣除的最小分数. 样例输入 3 3 10 3 5 3 1 3 1 6 3 2 1

[六省联考2017]期末考试

4868: [Shoi2017]期末考试 2017-09-03 Description 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程公布成绩,每等待一天就会产生C不愉快度.对于第i门课程,按照原本的计划,会在第bi天公布成绩.有如下两种操作可以调整公布成绩的时间:1.将负责课程X的部分老师调整到课程Y,调整之后公布课程X成绩的时间推迟

bzoj4868 [Shoi2017]期末考试

4868: [Shoi2017]期末考试 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 961  Solved: 437[Submit][Status][Discuss] Description 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天 或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程 公布成绩,每等待一天就会产生C不愉快度.对

【bzoj4868】[Shoi2017]期末考试 前缀和

题目描述 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布.第i位同学希望在第ti天或之前得知所.有.课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程公布成绩,每等待一天就会产生C不愉快度.对于第i门课程,按照原本的计划,会在第bi天公布成绩.有如下两种操作可以调整公布成绩的时间:1.将负责课程X的部分老师调整到课程Y,调整之后公布课程X成绩的时间推迟一天,公布课程Y成绩的时间提前一天:每次操作产生A不愉快度.2.增加一部分老师