답안 #580463

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
580463 2022-06-21T09:37:29 Z urd05 Uplifting Excursion (BOI22_vault) C++17
20 / 100
3582 ms 8140 KB
#include <bits/stdc++.h>
using namespace std;

int m;
long long l;
int dp0[1000001];
int dp[1000001];
const int zero=500000;
long long arr[202];
typedef pair<int,int> P;

int main(void) {
    scanf("%d %lld",&m,&l);
    for(int i=1;i<=m*2+1;i++) {
        scanf("%lld",&arr[i]);
    }
    long long total=l;
    long long ret=0;
    for(int i=m+2;i<=m*2+1;i++) {
        long long use=total/(i-m-1);
        use=min(use,arr[i]);
        total-=1LL*use*(i-m-1);
        use=max(use-100,0LL);
        arr[i]-=use;
        l-=1LL*use*(i-m-1);
        ret+=use;
        if (arr[i]>100) {
            arr[i]=100;
        }
    }
    for(int i=0;i<=zero*2;i++) {
        dp0[i]=-1e7;
        dp[i]=-1e7;
    }
    if (l>zero||l<-zero) {
        printf("impossible");
        return 0;
    }
    dp[zero]=0;
    for(int i=1;i<=m*2+1;i++) {
        if (i==m+1){
            for(int j=0;j<=zero*2;j++) {
                dp[j]=dp[j]+arr[m+1];
            }
            continue;
        }
        int val=abs(i-m-1);
        if (i<m+1) {
            for(int j=zero*2;j>zero*2-val;j--) {
                deque<P> dq;
                for(int k=j;k>=0;k-=val) {
                    int now=dp[k]+k/val;
                    while (!dq.empty()&&dq.back().second>k+arr[i]*val) {
                        dq.pop_back();
                    }
                    while (!dq.empty()&&dq.front().first<=now) {
                        dq.pop_front();
                    }
                    dq.push_front(P(now,k));
                    dp0[k]=max(dp0[k],dq.back().first-k/val);
                }
            }
        }
        else {
            for(int j=0;j<val;j++) {
                deque<P> dq;
                for(int k=j;k<=zero*2;k+=val) {
                    int now=dp[k]-k/val;
                    while (!dq.empty()&&dq.back().second<k-arr[i]*val) {
                        dq.pop_back();
                    }
                    while (!dq.empty()&&dq.front().first<=now) {
                        dq.pop_front();
                    }
                    dq.push_front(P(now,k));
                    dp0[k]=max(dp0[k],dq.back().first+k/val);
                }
            }
        }
        for(int j=0;j<=zero*2;j++) {
            dp[j]=dp0[j];
            dp0[j]=-1e7;
        }
    }
    if (dp[zero+l]<0) {
        printf("impossible");
        return 0;
    }
    printf("%lld",ret+dp[zero+l]);
}

Compilation message

vault.cpp: In function 'int main()':
vault.cpp:13:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   13 |     scanf("%d %lld",&m,&l);
      |     ~~~~~^~~~~~~~~~~~~~~~~
vault.cpp:15:14: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |         scanf("%lld",&arr[i]);
      |         ~~~~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 52 ms 8020 KB Output is correct
2 Correct 85 ms 8104 KB Output is correct
3 Correct 30 ms 8020 KB Output is correct
4 Correct 275 ms 8112 KB Output is correct
5 Correct 4 ms 8020 KB Output is correct
6 Correct 1299 ms 8104 KB Output is correct
7 Correct 1364 ms 8108 KB Output is correct
8 Correct 1267 ms 8020 KB Output is correct
9 Correct 1256 ms 8108 KB Output is correct
10 Correct 1445 ms 8020 KB Output is correct
11 Correct 1437 ms 8108 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 52 ms 8020 KB Output is correct
2 Correct 85 ms 8104 KB Output is correct
3 Correct 30 ms 8020 KB Output is correct
4 Correct 275 ms 8112 KB Output is correct
5 Correct 4 ms 8020 KB Output is correct
6 Correct 1299 ms 8104 KB Output is correct
7 Correct 1364 ms 8108 KB Output is correct
8 Correct 1267 ms 8020 KB Output is correct
9 Correct 1256 ms 8108 KB Output is correct
10 Correct 1445 ms 8020 KB Output is correct
11 Correct 1437 ms 8108 KB Output is correct
12 Correct 51 ms 8020 KB Output is correct
13 Correct 85 ms 8020 KB Output is correct
14 Correct 32 ms 8124 KB Output is correct
15 Correct 259 ms 8108 KB Output is correct
16 Correct 4 ms 8020 KB Output is correct
17 Correct 1290 ms 8108 KB Output is correct
18 Correct 1372 ms 8108 KB Output is correct
19 Correct 1270 ms 8104 KB Output is correct
20 Correct 1295 ms 8104 KB Output is correct
21 Correct 1467 ms 8124 KB Output is correct
22 Correct 1454 ms 8108 KB Output is correct
23 Correct 4 ms 8020 KB Output is correct
24 Correct 2753 ms 8104 KB Output is correct
25 Correct 2897 ms 8108 KB Output is correct
26 Correct 3304 ms 8108 KB Output is correct
27 Correct 3582 ms 8100 KB Output is correct
28 Correct 3410 ms 8108 KB Output is correct
29 Correct 3453 ms 8108 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 311 ms 8108 KB Output is correct
2 Correct 859 ms 8112 KB Output is correct
3 Correct 863 ms 8104 KB Output is correct
4 Incorrect 796 ms 8140 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 311 ms 8108 KB Output is correct
2 Correct 859 ms 8112 KB Output is correct
3 Correct 863 ms 8104 KB Output is correct
4 Incorrect 796 ms 8140 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 311 ms 8108 KB Output is correct
2 Correct 859 ms 8112 KB Output is correct
3 Correct 863 ms 8104 KB Output is correct
4 Incorrect 796 ms 8140 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 52 ms 8020 KB Output is correct
2 Correct 85 ms 8104 KB Output is correct
3 Correct 30 ms 8020 KB Output is correct
4 Correct 275 ms 8112 KB Output is correct
5 Correct 4 ms 8020 KB Output is correct
6 Correct 1299 ms 8104 KB Output is correct
7 Correct 1364 ms 8108 KB Output is correct
8 Correct 1267 ms 8020 KB Output is correct
9 Correct 1256 ms 8108 KB Output is correct
10 Correct 1445 ms 8020 KB Output is correct
11 Correct 1437 ms 8108 KB Output is correct
12 Correct 311 ms 8108 KB Output is correct
13 Correct 859 ms 8112 KB Output is correct
14 Correct 863 ms 8104 KB Output is correct
15 Incorrect 796 ms 8140 KB Output isn't correct
16 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 311 ms 8108 KB Output is correct
2 Correct 859 ms 8112 KB Output is correct
3 Correct 863 ms 8104 KB Output is correct
4 Incorrect 796 ms 8140 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 52 ms 8020 KB Output is correct
2 Correct 85 ms 8104 KB Output is correct
3 Correct 30 ms 8020 KB Output is correct
4 Correct 275 ms 8112 KB Output is correct
5 Correct 4 ms 8020 KB Output is correct
6 Correct 1299 ms 8104 KB Output is correct
7 Correct 1364 ms 8108 KB Output is correct
8 Correct 1267 ms 8020 KB Output is correct
9 Correct 1256 ms 8108 KB Output is correct
10 Correct 1445 ms 8020 KB Output is correct
11 Correct 1437 ms 8108 KB Output is correct
12 Correct 51 ms 8020 KB Output is correct
13 Correct 85 ms 8020 KB Output is correct
14 Correct 32 ms 8124 KB Output is correct
15 Correct 259 ms 8108 KB Output is correct
16 Correct 4 ms 8020 KB Output is correct
17 Correct 1290 ms 8108 KB Output is correct
18 Correct 1372 ms 8108 KB Output is correct
19 Correct 1270 ms 8104 KB Output is correct
20 Correct 1295 ms 8104 KB Output is correct
21 Correct 1467 ms 8124 KB Output is correct
22 Correct 1454 ms 8108 KB Output is correct
23 Correct 4 ms 8020 KB Output is correct
24 Correct 2753 ms 8104 KB Output is correct
25 Correct 2897 ms 8108 KB Output is correct
26 Correct 3304 ms 8108 KB Output is correct
27 Correct 3582 ms 8100 KB Output is correct
28 Correct 3410 ms 8108 KB Output is correct
29 Correct 3453 ms 8108 KB Output is correct
30 Correct 311 ms 8108 KB Output is correct
31 Correct 859 ms 8112 KB Output is correct
32 Correct 863 ms 8104 KB Output is correct
33 Incorrect 796 ms 8140 KB Output isn't correct
34 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 311 ms 8108 KB Output is correct
2 Correct 859 ms 8112 KB Output is correct
3 Correct 863 ms 8104 KB Output is correct
4 Incorrect 796 ms 8140 KB Output isn't correct
5 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 52 ms 8020 KB Output is correct
2 Correct 85 ms 8104 KB Output is correct
3 Correct 30 ms 8020 KB Output is correct
4 Correct 275 ms 8112 KB Output is correct
5 Correct 4 ms 8020 KB Output is correct
6 Correct 1299 ms 8104 KB Output is correct
7 Correct 1364 ms 8108 KB Output is correct
8 Correct 1267 ms 8020 KB Output is correct
9 Correct 1256 ms 8108 KB Output is correct
10 Correct 1445 ms 8020 KB Output is correct
11 Correct 1437 ms 8108 KB Output is correct
12 Correct 51 ms 8020 KB Output is correct
13 Correct 85 ms 8020 KB Output is correct
14 Correct 32 ms 8124 KB Output is correct
15 Correct 259 ms 8108 KB Output is correct
16 Correct 4 ms 8020 KB Output is correct
17 Correct 1290 ms 8108 KB Output is correct
18 Correct 1372 ms 8108 KB Output is correct
19 Correct 1270 ms 8104 KB Output is correct
20 Correct 1295 ms 8104 KB Output is correct
21 Correct 1467 ms 8124 KB Output is correct
22 Correct 1454 ms 8108 KB Output is correct
23 Correct 4 ms 8020 KB Output is correct
24 Correct 2753 ms 8104 KB Output is correct
25 Correct 2897 ms 8108 KB Output is correct
26 Correct 3304 ms 8108 KB Output is correct
27 Correct 3582 ms 8100 KB Output is correct
28 Correct 3410 ms 8108 KB Output is correct
29 Correct 3453 ms 8108 KB Output is correct
30 Correct 311 ms 8108 KB Output is correct
31 Correct 859 ms 8112 KB Output is correct
32 Correct 863 ms 8104 KB Output is correct
33 Incorrect 796 ms 8140 KB Output isn't correct
34 Halted 0 ms 0 KB -