답안 #1115537

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1115537 2024-11-20T15:15:23 Z gdragon Bali Sculptures (APIO15_sculpture) C++17
9 / 100
175 ms 262144 KB
#include <bits/stdc++.h>
using namespace std;
#define TASK "long"
#define fi first
#define se second
#define ll long long
#define pb push_back
#define ALL(x) (x).begin(), (x).end()
#define GETBIT(mask, i) ((mask) >> (i) & 1)
#define MASK(i) ((1LL) << (i))
#define SZ(x) ((int)(x).size())
#define mp make_pair
#define CNTBIT(mask) __builtin_popcount(mask)
template<class X, class Y> bool maximize(X &x, Y y){ if (x < y) {x = y; return true;} return false;};
template<class X, class Y> bool minimize(X &x, Y y){ if (x > y) {x = y; return true;} return false;};
typedef pair<int, int> ii;
const int N = 1e5 + 5;
const long long INF = (long long)1e18 + 7;
const int mod = 1e9 + 7;
int n, A, B;
vector<long long> f;
long long a[N];
void read() {
    cin >> n >> A >> B;
    f.assign(n + 1, 0);
    for(int i = 1; i <= n; i++) {
        cin >> f[i];
        a[i] = f[i];
        f[i] += f[i - 1];
    }
}
long long sum(int l, int r) {
    return f[r] - f[l - 1];
}
void sub1() {
    int m = n - 1;
    long long ans = INF;
    for(int mask = 0; mask < MASK(m); mask++) {
        if (CNTBIT(mask) + 1 > B || CNTBIT(mask) + 1 < A) continue;
        int pre = 1;
        long long res = 0;
        for(int i = 1; i < n; i++) if (GETBIT(mask, i - 1)) {
            res |= sum(pre, i);
            pre = i + 1;
        }
        res |= sum(pre, n);
        ans = min(ans, res);
    }
    cout << ans;
}
void sub3() {
    vector<vector<vector<long long>>> dp(n + 2, vector<vector<long long>>(B + 2));
    dp[0][0].push_back(0);
    for(int i = 1; i <= n; i++) {
        for(int k = 1; k <= min(i, B); k++) {
            long long x = 0;
            for(int j = i; j >= 1; j--) {
                x += a[j];
                // long long tmp = INF;
                for(long long z: dp[j - 1][k - 1]) {
                    // minimize(tmp, (long long)(x | z));
                    dp[i][k].push_back((x | z));
                }
            }
        }
    }
    long long ans = INF;
    for(int k = A; k <= B; k++) {
        for(long long x: dp[n][k]) ans = min(ans, x);
    }
    assert(ans != INF);
    cout << ans;
}
void solve() {
    if (n <= 20) {
        sub1();
        return;
    }
    else {
        sub3();
    }
}
signed main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    if (fopen(TASK".inp", "r")) {
        freopen(TASK".inp", "r", stdin);
        freopen(TASK".out", "w", stdout);
    }
    // cerr << (1082353817592 | 53288572918018395) << endl;
    int test = 1;
    // cin >> test;
    while(test--) {
        read();
        solve();
    }
    return 0;
}

Compilation message

sculpture.cpp: In function 'int main()':
sculpture.cpp:86:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   86 |         freopen(TASK".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
sculpture.cpp:87:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   87 |         freopen(TASK".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 2 ms 336 KB Output is correct
7 Correct 1 ms 424 KB Output is correct
8 Correct 2 ms 468 KB Output is correct
9 Correct 2 ms 336 KB Output is correct
10 Correct 2 ms 336 KB Output is correct
11 Correct 2 ms 336 KB Output is correct
12 Correct 2 ms 336 KB Output is correct
13 Correct 31 ms 336 KB Output is correct
14 Correct 1 ms 504 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
16 Correct 1 ms 336 KB Output is correct
17 Correct 1 ms 336 KB Output is correct
18 Correct 1 ms 504 KB Output is correct
19 Correct 1 ms 336 KB Output is correct
20 Correct 1 ms 380 KB Output is correct
21 Correct 4 ms 336 KB Output is correct
22 Correct 4 ms 336 KB Output is correct
23 Correct 4 ms 464 KB Output is correct
24 Correct 2 ms 336 KB Output is correct
25 Correct 4 ms 336 KB Output is correct
26 Correct 26 ms 476 KB Output is correct
27 Correct 1 ms 336 KB Output is correct
28 Correct 1 ms 504 KB Output is correct
29 Correct 1 ms 336 KB Output is correct
30 Correct 1 ms 336 KB Output is correct
31 Correct 4 ms 336 KB Output is correct
32 Correct 2 ms 336 KB Output is correct
33 Correct 26 ms 336 KB Output is correct
34 Correct 31 ms 336 KB Output is correct
35 Correct 2 ms 336 KB Output is correct
36 Correct 30 ms 468 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 2 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 2 ms 336 KB Output is correct
9 Correct 2 ms 336 KB Output is correct
10 Correct 2 ms 468 KB Output is correct
11 Correct 2 ms 504 KB Output is correct
12 Correct 2 ms 336 KB Output is correct
13 Correct 31 ms 468 KB Output is correct
14 Correct 1 ms 512 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
16 Correct 1 ms 336 KB Output is correct
17 Correct 1 ms 336 KB Output is correct
18 Correct 1 ms 336 KB Output is correct
19 Correct 1 ms 336 KB Output is correct
20 Correct 1 ms 336 KB Output is correct
21 Correct 4 ms 336 KB Output is correct
22 Correct 4 ms 336 KB Output is correct
23 Correct 4 ms 336 KB Output is correct
24 Correct 2 ms 336 KB Output is correct
25 Correct 4 ms 336 KB Output is correct
26 Correct 26 ms 336 KB Output is correct
27 Correct 19 ms 19984 KB Output is correct
28 Correct 41 ms 82224 KB Output is correct
29 Correct 8 ms 5960 KB Output is correct
30 Runtime error 168 ms 262144 KB Execution killed with signal 9
31 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 2 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 4 ms 336 KB Output is correct
9 Correct 2 ms 504 KB Output is correct
10 Correct 2 ms 336 KB Output is correct
11 Correct 3 ms 336 KB Output is correct
12 Correct 2 ms 336 KB Output is correct
13 Correct 31 ms 336 KB Output is correct
14 Correct 19 ms 19968 KB Output is correct
15 Correct 44 ms 83296 KB Output is correct
16 Correct 8 ms 5960 KB Output is correct
17 Runtime error 170 ms 262144 KB Execution killed with signal 9
18 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 384 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 336 KB Output is correct
5 Correct 1 ms 504 KB Output is correct
6 Correct 2 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 2 ms 464 KB Output is correct
9 Correct 2 ms 336 KB Output is correct
10 Correct 2 ms 336 KB Output is correct
11 Correct 4 ms 336 KB Output is correct
12 Correct 2 ms 336 KB Output is correct
13 Correct 32 ms 336 KB Output is correct
14 Correct 1 ms 336 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
16 Correct 1 ms 348 KB Output is correct
17 Correct 1 ms 504 KB Output is correct
18 Correct 1 ms 336 KB Output is correct
19 Correct 1 ms 336 KB Output is correct
20 Correct 1 ms 336 KB Output is correct
21 Correct 4 ms 336 KB Output is correct
22 Correct 4 ms 336 KB Output is correct
23 Correct 4 ms 468 KB Output is correct
24 Correct 2 ms 336 KB Output is correct
25 Correct 5 ms 336 KB Output is correct
26 Correct 28 ms 336 KB Output is correct
27 Correct 1 ms 336 KB Output is correct
28 Correct 1 ms 336 KB Output is correct
29 Correct 1 ms 336 KB Output is correct
30 Correct 2 ms 336 KB Output is correct
31 Correct 4 ms 336 KB Output is correct
32 Correct 2 ms 336 KB Output is correct
33 Correct 26 ms 336 KB Output is correct
34 Correct 31 ms 336 KB Output is correct
35 Correct 2 ms 508 KB Output is correct
36 Correct 31 ms 456 KB Output is correct
37 Correct 19 ms 19968 KB Output is correct
38 Correct 39 ms 82224 KB Output is correct
39 Correct 8 ms 5960 KB Output is correct
40 Runtime error 170 ms 262144 KB Execution killed with signal 9
41 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 336 KB Output is correct
2 Correct 1 ms 336 KB Output is correct
3 Correct 1 ms 336 KB Output is correct
4 Correct 1 ms 508 KB Output is correct
5 Correct 1 ms 336 KB Output is correct
6 Correct 2 ms 336 KB Output is correct
7 Correct 1 ms 336 KB Output is correct
8 Correct 2 ms 336 KB Output is correct
9 Correct 3 ms 336 KB Output is correct
10 Correct 2 ms 336 KB Output is correct
11 Correct 2 ms 336 KB Output is correct
12 Correct 2 ms 468 KB Output is correct
13 Correct 32 ms 508 KB Output is correct
14 Correct 1 ms 336 KB Output is correct
15 Correct 1 ms 336 KB Output is correct
16 Correct 1 ms 336 KB Output is correct
17 Correct 2 ms 508 KB Output is correct
18 Correct 4 ms 336 KB Output is correct
19 Correct 2 ms 336 KB Output is correct
20 Correct 29 ms 336 KB Output is correct
21 Correct 31 ms 336 KB Output is correct
22 Correct 2 ms 336 KB Output is correct
23 Correct 31 ms 336 KB Output is correct
24 Correct 19 ms 19968 KB Output is correct
25 Correct 41 ms 82840 KB Output is correct
26 Correct 9 ms 5960 KB Output is correct
27 Runtime error 175 ms 262144 KB Execution killed with signal 9
28 Halted 0 ms 0 KB -