QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#617148 | #3998. The Profiteer | Nesraychan | WA | 1032ms | 8300kb | C++14 | 2.8kb | 2024-10-06 14:07:45 | 2024-10-06 14:07:45 |
Judging History
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'