QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#693827#9331. Maximize the Minimumlytqwq#WA 1ms7936kbC++142.4kb2024-10-31 16:48:432024-10-31 16:48:43

Judging History

你现在查看的是最新测评结果

  • [2024-10-31 16:48:43]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:7936kb
  • [2024-10-31 16:48:43]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define N 800010
#define ll long long
#define INF 0x7fffffffffffffffLL
int read(){
    int res=0,zf=1;char ch;
    while((ch=getchar())<48||ch>57)if(ch=='-')zf=!zf;res=(ch^48);
    while((ch=getchar())>=48&&ch<=57)res=(res<<3)+(res<<1)+(ch^48);
    return zf?res:(-res);
}
ll readll(){
    ll res=0;int zf=1;char ch;
    while((ch=getchar())<48||ch>57)if(ch=='-')zf=!zf;res=(ch^48);
    while((ch=getchar())>=48&&ch<=57)res=(res<<3)+(res<<1)+(ch^48);
    return zf?res:(-res);
}
int n,m;
ll maxs,adds;
struct node{
    ll s,w;int from;
}s[N<<1];
ll sa[N<<1],sb[N<<1],sap[N<<1],sbp[N<<1];
inline bool operator <(const node&x,const node&y){return x.s<y.s;}
int chk(ll d){
    int lst=0;
    for(int i=0;i<=n+m;i++)sap[i]=sbp[i]=-INF;
    for(int i=1;i<=n+m;i++){
        while(lst<i-1&&s[lst+1].s+d<=s[i].s)lst++;
        if(s[i].from){
            sb[i]=max(sb[i-1]+s[i].w,sa[lst]+s[i].w);
            sa[i]=sa[i-1];
            if(sa[lst]>0)sbp[i]=max(sbp[i-1]+s[i].w,sa[lst]+s[i].w);
            else sbp[i]=sbp[i-1]+s[i].w;
            sap[i]=sap[i-1];
        }else{
            sa[i]=max(sa[i-1]+s[i].w,sb[lst]+s[i].w);
            sb[i]=sb[i-1];
            if(sb[lst]>0)sap[i]=max(sap[i-1]+s[i].w,sb[lst]+s[i].w);
            else sap[i]=sap[i-1]+s[i].w;
            sbp[i]=sbp[i-1];
        }
    }
    return max(sap[n+m],sbp[n+m])>=adds-maxs;
}
int main(){
    int t=read();
    while(t--){
        n=read();m=read();maxs=readll();
        adds=0;
        for(int i=1;i<=n;i++){
            s[i].s=readll();
            s[i].from=0;
            //adds+=s[i].s;
        }
        for(int i=1;i<=m;i++){
            s[i+n].s=readll();
            s[i+n].from=1;
           // adds+=s[i+n].s;
        }
        for(int i=1;i<=n;i++){
            s[i].w=readll();
            adds+=s[i].w;
        }
        for(int i=1;i<=m;i++){
            s[i+n].w=readll();
            adds+=s[i+n].w;
        }
        if(adds<maxs)maxs=adds;
        sort(s+1,s+n+m+1);
        ll L=0,R=2,res=0;
        while(L<=R){
            ll mid=(L+R)>>1;
            if(chk(mid)){
                res=mid;
                L=mid+1;
            }else{
                R=mid-1;
            }
        }
        printf("%lld\n",res);
    }
    return 0;
}

/*
1
5 5 5
1 2 3 4 5
-5 -3 3 6 8
10 10 10 10 10
10 10 3 10 10
*/

詳細信息

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 7936kb

input:

2
1 4 10
15
1 6 9 13
8
3 1 2 4
5 4 4
-1 5 3 2 -4
-7 8 6 2
2 3 1 1 2
3 1 1 1

output:

2
2

result:

wrong answer 1st numbers differ - expected: '14', found: '2'