QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#617148#3998. The ProfiteerNesraychanWA 1032ms8300kbC++142.8kb2024-10-06 14:07:452024-10-06 14:07:45

Judging History

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

  • [2024-10-06 14:07:45]
  • 评测
  • 测评结果:WA
  • 用时:1032ms
  • 内存:8300kb
  • [2024-10-06 14:07:45]
  • 提交

answer

#include<bits/stdc++.h>
#define IL inline
#define reg register
#define N 200200
#define M 80008000
IL int read()
{
    reg int x=0; reg char ch=getchar();
    while(ch<'0'||ch>'9')ch=getchar();
    while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
    return x;
}

int n,k,E,p[N];
int a[N],b[N],w[N];

IL void cmax(reg int &x,reg int y){x<y?x=y:0;}
IL int max(reg int x,reg int y){return x>y?x:y;}
IL int min(reg int x,reg int y){return x<y?x:y;}

int buf[M],*dp,*now=buf;

IL void copy(reg int *f,reg int *g){for(reg int i=0;i<=k;++i)f[i]=g[i];}

IL void add(reg int *f,reg int x,reg int w)
{
    for(reg int i=k;i>=x;--i)
        cmax(f[i],f[i-x]+w);
}

IL bool check(reg int *f)
{
    long long sum=0;
    for(reg int i=1;i<=k;++i)sum+=E-f[i];
    return sum>=0;
}

void dc(reg int l,reg int r,reg int ql,reg int qr)
{
    if(ql>qr)return;
    if(l==r)
    {
        for(reg int i=ql;i<=qr;++i)p[i]=l;
        return;
    }
    int *odp=now;
    now+=k+1;
    int *tmp=now;
    now+=k+1,copy(odp,dp);
    reg int mid=l+r+1>>1,L=max(ql,mid),R=qr,Mid,pos;
    for(reg int i=l;i<mid;++i)add(dp,a[i],w[i]);
    for(reg int i=mid;i<=min(r,ql-1);++i)add(dp,b[i],w[i]);
    while(L<=R)
    {
        Mid=L+R>>1,copy(tmp,dp);
        for(reg int i=L;i<=Mid;++i)add(dp,b[i],w[i]);
        for(reg int i=R;i>Mid;--i)add(dp,a[i],w[i]);
        if(!check(dp))
        {
            copy(dp,tmp);
            for(reg int i=L;i<=Mid;++i)add(dp,b[i],w[i]);
            L=Mid+1;
        }else
        {
            copy(dp,tmp);
            for(reg int i=R;i>=Mid;--i)add(dp,a[i],w[i]);
            R=Mid-1;
        }
    }
    pos=R,copy(dp,odp);
    for(reg int i=qr;i>pos;--i)add(dp,a[i],w[i]);
    for(reg int i=mid;i<=r&&i<ql;++i)add(dp,b[i],w[i]);
    dc(l,mid-1,ql,pos);
    copy(dp,odp);
    for(reg int i=l;i<mid;++i)add(dp,a[i],w[i]);
    for(reg int i=pos;i>=l&&i>r;--i)add(dp,b[i],w[i]);
    dc(mid,r,pos+1,qr);
    copy(dp,odp),now-=k+1<<1;
}

main()
{
    n=read(),k=read(),E=read();
    for(reg int i=1;i<=n;++i)
        w[i]=read(),a[i]=read(),b[i]=read();
    dp=now,now+=k+1;
    int *tmp; tmp=now,now+=k+1;
    reg int l=1,r=n,mid;
    while(l<=r)
    {
        mid=l+r>>1,copy(tmp,dp);
        for(reg int i=l;i<=mid;++i)add(dp,b[i],w[i]);
        for(reg int i=r;i>mid;--i)add(dp,a[i],w[i]);
        if(!check(dp))
        {
            copy(dp,tmp);
            for(reg int i=l;i<=mid;++i)add(dp,b[i],w[i]);
            l=mid+1;
        }else
        {
            copy(dp,tmp);
            for(reg int i=r;i>=mid;--i)add(dp,a[i],w[i]);
            r=mid-1;
        }
    }
    now-=k+1;
    for(reg int i=0;i<=k;++i)dp[i]=0;
    dc(1,n,l,n);
    long long ans=0;
    for(reg int i=1;i<=n;++i)ans+=p[i];
    printf("%lld\n",ans);
}


Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 2ms
memory: 7900kb

input:

4 5 3
3 2 4
1 2 3
2 1 2
3 1 3

output:

1

result:

ok single line: '1'

Test #2:

score: 0
Accepted
time: 2ms
memory: 7840kb

input:

4 5 4
3 2 4
1 2 3
2 1 2
3 1 3

output:

3

result:

ok single line: '3'

Test #3:

score: 0
Accepted
time: 0ms
memory: 7864kb

input:

4 5 5
3 2 4
1 2 3
2 1 2
3 1 3

output:

7

result:

ok single line: '7'

Test #4:

score: 0
Accepted
time: 24ms
memory: 7908kb

input:

200000 50 23333
2620 5 21
8192 17 34
6713 38 46
6687 13 42
390 9 13
4192 7 37
7898 17 21
1471 16 45
3579 22 40
9628 8 23
7164 28 45
3669 14 31
5549 29 35
4670 30 39
5811 15 20
4162 18 29
7590 29 41
7786 23 35
383 9 40
5576 39 46
5586 4 9
1110 14 33
8568 4 6
8548 39 42
9133 10 42
6679 22 39
8353 33 3...

output:

0

result:

ok single line: '0'

Test #5:

score: 0
Accepted
time: 993ms
memory: 6356kb

input:

200000 50 233332
8019 18 20
3111 27 40
2015 16 47
6491 17 18
1224 30 38
428 23 34
7521 4 41
7252 6 33
4121 32 45
4230 18 35
1605 21 42
9489 17 25
3704 35 45
6202 8 22
6493 1 5
3041 14 46
4509 23 43
9646 11 48
5294 19 27
3562 19 40
9408 30 47
1751 21 29
4053 4 27
5596 32 49
8609 13 29
1686 4 31
3588 ...

output:

17523021

result:

ok single line: '17523021'

Test #6:

score: 0
Accepted
time: 378ms
memory: 7648kb

input:

200000 50 2333331
7420 30 44
8652 22 28
5418 8 21
9825 3 8
4257 21 40
9962 6 16
3370 18 41
2192 37 41
231 8 18
7764 3 41
3455 9 18
1159 8 46
9775 9 42
4400 21 43
4593 10 22
712 7 22
2067 21 27
9618 9 35
8008 13 38
114 4 31
4503 39 49
4661 14 41
4837 15 35
1371 12 16
9568 21 48
8934 16 34
870 4 35
83...

output:

20000100000

result:

ok single line: '20000100000'

Test #7:

score: 0
Accepted
time: 1032ms
memory: 8300kb

input:

200000 50 253330
4837 37 46
2436 11 48
2043 24 50
3544 27 40
1499 21 43
9009 36 46
9172 11 17
585 29 44
6379 4 28
6630 25 37
9230 24 35
5736 23 50
4324 34 50
4624 23 47
9933 3 12
577 12 18
4411 24 32
8750 42 48
4808 21 34
3904 7 17
5979 41 48
2838 29 40
8682 25 46
4026 11 19
8371 8 42
4550 6 24
1546...

output:

2513593675

result:

ok single line: '2513593675'

Test #8:

score: -100
Wrong Answer
time: 646ms
memory: 6532kb

input:

200000 50 193334
8521 14 21
3902 5 6
2949 4 41
1034 10 36
6156 16 36
9432 35 37
3752 25 37
9668 5 9
3194 43 45
9849 1 26
1582 6 10
9920 20 50
994 34 50
9510 12 38
4513 18 31
6294 3 48
4949 9 18
2348 10 49
5492 19 46
2265 3 37
67 20 40
8752 1 5
4610 27 41
7344 27 39
7767 16 29
921 7 16
1853 23 44
936...

output:

1430767

result:

wrong answer 1st lines differ - expected: '1432887', found: '1430767'