답안 #577849

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
577849 2022-06-15T10:07:57 Z patrikpavic2 Uplifting Excursion (BOI22_vault) C++17
0 / 100
4 ms 340 KB
#include <cstdio>
#include <algorithm>

using namespace std;

typedef long long ll;

const int M = 102;
const int GR = M * M;
const int INF = 0x3f3f3f3f;

int m;
ll L, A[M], kol;
int dp[2 * GR];
int cnt[30];

int main(){
    scanf("%d%lld", &m, &L);
    for(int i = m;i >= 1;i--){
        ll x; scanf("%lld", &x);
      //  A[i] += x; L += x * i;
    }
    ll bla; scanf("%lld", &bla);
    for(int i = 1;i <= m;i++){
        ll x; scanf("%lld", &x);
        A[i] += x;
    }
    ll L2 = 0;
    for(int i = 1;i <= m;i++){
        ll uz = min(A[i], max(L - GR, 0LL) / i);
        L -= uz * i;
        if(uz >= M){
            A[i] -= (uz - M);
            L2 += M * i;
        }
        else{
            L2 += uz * i;
        }
        A[i] = min((ll)GR / i, A[i]);
    }
    L += L2;
    for(int i = 1;i < 2 * GR;i++)
        dp[i] = -INF;
    for(int i = 1;i <= m;i++){
        for(int j = 0;j < 10;j++)
            cnt[j] = 0;
        cnt[0] = A[i];
        for(int j = 0;j < 10;j++){
            if(cnt[j] > 2){
                if(cnt[j] % 2){
                    cnt[j + 1] += (cnt[j] - 1) / 2;
                    cnt[j] = 1;
                }
                else{
                    cnt[j + 1] += (cnt[j] - 2) / 2;
                    cnt[j] = 2;
                }
            }
        }
        for(int j = 0;j < 10;j++){
            for(int b = 0;b < cnt[j];b++)
                for(int k = 2 * GR - 1;k >= i * (1 << j);k--)
                    dp[k] = max(dp[k], (1 << j) + dp[k - i * (1 << j)]);
        }
    }
    if(L >= 2 * GR || dp[L] < 0)
        printf("impossible\n");
    else
        printf("%lld\n", kol + dp[L] + bla);
    return 0;
}

Compilation message

vault.cpp: In function 'int main()':
vault.cpp:18:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   18 |     scanf("%d%lld", &m, &L);
      |     ~~~~~^~~~~~~~~~~~~~~~~~
vault.cpp:20:20: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   20 |         ll x; scanf("%lld", &x);
      |               ~~~~~^~~~~~~~~~~~
vault.cpp:23:18: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   23 |     ll bla; scanf("%lld", &bla);
      |             ~~~~~^~~~~~~~~~~~~~
vault.cpp:25:20: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   25 |         ll x; scanf("%lld", &x);
      |               ~~~~~^~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Incorrect 4 ms 340 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Incorrect 4 ms 340 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Incorrect 4 ms 340 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Incorrect 4 ms 340 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 340 KB Output is correct
2 Incorrect 4 ms 340 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 340 KB Output isn't correct
2 Halted 0 ms 0 KB -