BZOJ 4868 [Shoi2017]期末考试 ——三分 枚举

考场上xjb三分过掉了。

然后$sdfzyhx$、$silvernebula$ $O(n)$虐掉了。

我还是太菜了

#include <cstdio>
#include <cmath>
#include <queue>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
#define F(i,j,k) for (int i=j;i<=k;++i)
#define D(i,j,k) for (int i=j;i>=k;--i)
#define ll long long
#define inf 10000000LL
#define llinf 10000000000000000LL
#define maxn 100005

void Finout()
{
    freopen("exam.in","r",stdin);
    freopen("exam.out","w",stdout);
}

int n,m,t[maxn],b[maxn];
ll A,B,C;

namespace Subtask1{
    ll cal(int mid)
    {
        ll ret=0,cnt0=0,cnt1=0;
        F(i,1,n) ret+=max((mid-t[i])*C,0LL);
        F(i,1,m)
        {
            if (b[i]<=mid) cnt0+=mid-b[i];
            else cnt1+=b[i]-mid;
        }
        if (A>=B) ret+=cnt1*B;
        else
        {
            if (cnt0>=cnt1) ret+=cnt1*A;
            else ret+=cnt0*A+(cnt1-cnt0)*B;
        }
        return ret;
    }
    void solve()
    {
        int l=0,r=0;
        F(i,1,m) r=max(r,b[i]);
        while (r-l>=4)
        {
            int m1=(l+r)/2,m2=(l+r)/2+1;
            if (cal(m1)>cal(m2)) l=m1;
            else r=m2;
        }
        ll ans=llinf; F(i,l,r) ans=min(ans,cal(i));
        printf("%lld\n",ans);
    }
}

namespace Subtask2{
    void solve()
    {
        ll ret=0,cnt0=0,cnt1=0,mini=llinf;
        F(i,1,n) mini=min(mini,1LL*t[i]);
        F(i,1,m)
        {
            if (b[i]<=mini) cnt0+=mini-b[i];
            else cnt1+=b[i]-mini;
        }
        if (A>=B) ret+=cnt1*B;
        else
        {
            if (cnt0>=cnt1) ret+=cnt1*A;
            else ret+=cnt0*A+(cnt1-cnt0)*B;
        }
        printf("%lld\n",ret);
    }
}

int main()
{
    scanf("%lld%lld%lld",&A,&B,&C);
    scanf("%d%d",&n,&m);
    F(i,1,n) scanf("%d",&t[i]);
    F(i,1,m) scanf("%d",&b[i]);
    if (C>=inf) Subtask2::solve();
    else Subtask1::solve();
    fclose(stdin);
    fclose(stdout);
}

  

时间: 2024-10-14 12:11:10

BZOJ 4868 [Shoi2017]期末考试 ——三分 枚举的相关文章

bzoj 4868: [Shoi2017]期末考试

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

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.增加一部分老师

BZOJ4868:[SHOI2017]期末考试——题解

http://www.lydsy.com/JudgeOnline/problem.php?id=4868 题目复制于洛谷:https://www.luogu.org/problemnew/show/P3745#sub 有n位同学,每位同学都参加了全部的m门课程的期末考试,都在焦急的等待成绩的公布. 第i位同学希望在第ti天或之前得知所有课程的成绩.如果在第ti天,有至少一门课程的成绩没有公布,他就会等待最后公布成绩的课程公布成绩,每等待一天就会产生C不愉快度.对于第i门课程,按照原本的计划,会在

[Shoi2017]期末考试

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

【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 首先,由于学生需要知道所有的成绩,这意味着即使只有一个成绩不知道,代价也是要算的,那么显然答案只和所有成绩都发出的时间有关. 显然,如果我们知道了所有成绩都发

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

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

[六省联考2017]期末考试

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

三分 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不愉快度.对