답안 #580453

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
580453 2022-06-21T09:15:31 Z 조영욱(#8357) Uplifting Excursion (BOI22_vault) C++17
20 / 100
3684 ms 8128 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;
    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);
        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("%d",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 57 ms 8020 KB Output is correct
2 Correct 107 ms 8112 KB Output is correct
3 Correct 35 ms 8020 KB Output is correct
4 Correct 310 ms 8116 KB Output is correct
5 Correct 5 ms 8020 KB Output is correct
6 Correct 1891 ms 8108 KB Output is correct
7 Correct 1809 ms 8108 KB Output is correct
8 Correct 1563 ms 8112 KB Output is correct
9 Correct 1797 ms 8116 KB Output is correct
10 Correct 1735 ms 8104 KB Output is correct
11 Correct 1680 ms 8108 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 57 ms 8020 KB Output is correct
2 Correct 107 ms 8112 KB Output is correct
3 Correct 35 ms 8020 KB Output is correct
4 Correct 310 ms 8116 KB Output is correct
5 Correct 5 ms 8020 KB Output is correct
6 Correct 1891 ms 8108 KB Output is correct
7 Correct 1809 ms 8108 KB Output is correct
8 Correct 1563 ms 8112 KB Output is correct
9 Correct 1797 ms 8116 KB Output is correct
10 Correct 1735 ms 8104 KB Output is correct
11 Correct 1680 ms 8108 KB Output is correct
12 Correct 78 ms 8108 KB Output is correct
13 Correct 94 ms 8104 KB Output is correct
14 Correct 34 ms 8104 KB Output is correct
15 Correct 299 ms 8104 KB Output is correct
16 Correct 5 ms 8048 KB Output is correct
17 Correct 1693 ms 8108 KB Output is correct
18 Correct 1763 ms 8128 KB Output is correct
19 Correct 1681 ms 8104 KB Output is correct
20 Correct 1520 ms 8112 KB Output is correct
21 Correct 1734 ms 8104 KB Output is correct
22 Correct 1749 ms 8104 KB Output is correct
23 Correct 5 ms 8020 KB Output is correct
24 Correct 3311 ms 8108 KB Output is correct
25 Correct 3338 ms 8108 KB Output is correct
26 Correct 3684 ms 8112 KB Output is correct
27 Correct 3583 ms 8104 KB Output is correct
28 Correct 3509 ms 8112 KB Output is correct
29 Correct 3569 ms 8104 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 318 ms 8112 KB Output is correct
2 Incorrect 1022 ms 8108 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 318 ms 8112 KB Output is correct
2 Incorrect 1022 ms 8108 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 318 ms 8112 KB Output is correct
2 Incorrect 1022 ms 8108 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 57 ms 8020 KB Output is correct
2 Correct 107 ms 8112 KB Output is correct
3 Correct 35 ms 8020 KB Output is correct
4 Correct 310 ms 8116 KB Output is correct
5 Correct 5 ms 8020 KB Output is correct
6 Correct 1891 ms 8108 KB Output is correct
7 Correct 1809 ms 8108 KB Output is correct
8 Correct 1563 ms 8112 KB Output is correct
9 Correct 1797 ms 8116 KB Output is correct
10 Correct 1735 ms 8104 KB Output is correct
11 Correct 1680 ms 8108 KB Output is correct
12 Correct 318 ms 8112 KB Output is correct
13 Incorrect 1022 ms 8108 KB Output isn't correct
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 318 ms 8112 KB Output is correct
2 Incorrect 1022 ms 8108 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 57 ms 8020 KB Output is correct
2 Correct 107 ms 8112 KB Output is correct
3 Correct 35 ms 8020 KB Output is correct
4 Correct 310 ms 8116 KB Output is correct
5 Correct 5 ms 8020 KB Output is correct
6 Correct 1891 ms 8108 KB Output is correct
7 Correct 1809 ms 8108 KB Output is correct
8 Correct 1563 ms 8112 KB Output is correct
9 Correct 1797 ms 8116 KB Output is correct
10 Correct 1735 ms 8104 KB Output is correct
11 Correct 1680 ms 8108 KB Output is correct
12 Correct 78 ms 8108 KB Output is correct
13 Correct 94 ms 8104 KB Output is correct
14 Correct 34 ms 8104 KB Output is correct
15 Correct 299 ms 8104 KB Output is correct
16 Correct 5 ms 8048 KB Output is correct
17 Correct 1693 ms 8108 KB Output is correct
18 Correct 1763 ms 8128 KB Output is correct
19 Correct 1681 ms 8104 KB Output is correct
20 Correct 1520 ms 8112 KB Output is correct
21 Correct 1734 ms 8104 KB Output is correct
22 Correct 1749 ms 8104 KB Output is correct
23 Correct 5 ms 8020 KB Output is correct
24 Correct 3311 ms 8108 KB Output is correct
25 Correct 3338 ms 8108 KB Output is correct
26 Correct 3684 ms 8112 KB Output is correct
27 Correct 3583 ms 8104 KB Output is correct
28 Correct 3509 ms 8112 KB Output is correct
29 Correct 3569 ms 8104 KB Output is correct
30 Correct 318 ms 8112 KB Output is correct
31 Incorrect 1022 ms 8108 KB Output isn't correct
32 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 318 ms 8112 KB Output is correct
2 Incorrect 1022 ms 8108 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 57 ms 8020 KB Output is correct
2 Correct 107 ms 8112 KB Output is correct
3 Correct 35 ms 8020 KB Output is correct
4 Correct 310 ms 8116 KB Output is correct
5 Correct 5 ms 8020 KB Output is correct
6 Correct 1891 ms 8108 KB Output is correct
7 Correct 1809 ms 8108 KB Output is correct
8 Correct 1563 ms 8112 KB Output is correct
9 Correct 1797 ms 8116 KB Output is correct
10 Correct 1735 ms 8104 KB Output is correct
11 Correct 1680 ms 8108 KB Output is correct
12 Correct 78 ms 8108 KB Output is correct
13 Correct 94 ms 8104 KB Output is correct
14 Correct 34 ms 8104 KB Output is correct
15 Correct 299 ms 8104 KB Output is correct
16 Correct 5 ms 8048 KB Output is correct
17 Correct 1693 ms 8108 KB Output is correct
18 Correct 1763 ms 8128 KB Output is correct
19 Correct 1681 ms 8104 KB Output is correct
20 Correct 1520 ms 8112 KB Output is correct
21 Correct 1734 ms 8104 KB Output is correct
22 Correct 1749 ms 8104 KB Output is correct
23 Correct 5 ms 8020 KB Output is correct
24 Correct 3311 ms 8108 KB Output is correct
25 Correct 3338 ms 8108 KB Output is correct
26 Correct 3684 ms 8112 KB Output is correct
27 Correct 3583 ms 8104 KB Output is correct
28 Correct 3509 ms 8112 KB Output is correct
29 Correct 3569 ms 8104 KB Output is correct
30 Correct 318 ms 8112 KB Output is correct
31 Incorrect 1022 ms 8108 KB Output isn't correct
32 Halted 0 ms 0 KB -