社区讨论

95pts求救QWQ

P3745[六省联考 2017] 期末考试参与者 3已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@mi6zdvs2
此快照首次捕获于
2025/11/20 13:18
4 个月前
此快照最后确认于
2025/11/20 13:18
4 个月前
查看原帖
CPP
#include<queue>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define rint register int 
#define _max(a,b) ((a)>(b) ? (a) : (b))
#define _min(a,b) ((a)<(b) ? (a) : (b)) 
typedef unsigned long long ll;
const int maxn=100086;

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

inline ll Read(){
    ll x=0;char c=getchar();
    while (!isdigit(c))c=getchar();
    while (isdigit(c)){
        x=(x<<3)+(x<<1)+(c^48);
        c=getchar();
    }
    return x;
}

inline ll calc(int x){
    ll exp=0,ned=0,tot=0;
    for (rint i=1;i<=m;++i){
        if (b[i]>x)ned+=b[i]-x;
        else exp+=x-b[i];
    }
    for (rint i=1;i<=n;++i)if (t[i]<x)tot+=(x-t[i]);
    ll ans=(ll)tot*C;
    if (A>B)ans+=(ll)B*ned;
    else if (ned>exp){
        ans+=(ll)exp*A+B*(ned-exp);
    }
    else {
        ans+=(ll)A*ned;
    }
    return ans;
}

int main(){
    A=Read(),B=Read(),C=Read();
    n=Read(),m=Read();
    for (rint i=1;i<=n;++i)t[i]=Read(),r=_max(r,t[i]);
    for (rint i=1;i<=m;++i)b[i]=Read(),r=_max(r,b[i]);l=1;
    while (l<r-1){
        int mid=(l+r)>>1;
        int mmid=(mid+r)>>1;
        if (calc(mid)<calc(mmid))r=mmid;
        else l=mid;
    }
    printf("%lld\n",_min(calc(l),calc(r)));
    return 0;
}
居然出乎意料的wawa66.....

回复

2 条回复,欢迎继续交流。

正在加载回复...