QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#221021#6632. Minimize Medianreal_sigma_teamRE 150ms11468kbC++202.2kb2023-10-21 02:10:552023-10-21 02:10:56

Judging History

你现在查看的是最新测评结果

  • [2023-10-21 02:10:56]
  • 评测
  • 测评结果:RE
  • 用时:150ms
  • 内存:11468kb
  • [2023-10-21 02:10:55]
  • 提交

answer

#include<bits/stdc++.h>

using namespace std;

#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()

using ll = long long;

const int N = 1e6 + 5;
int n, m, k;
int ls[N];
vector<int> pr;
ll c[N * 2], a[N];

int divup(int x, int y) {
    return (x + y - 1) / y;
}

ll check(int x) {
    ll ans = 0;
    for (int i = 0; i < n; i++) {
        ll cur = 1e18;
        vector<ll> dp(a[i] + 1, 1e18);
        dp[a[i]] = 0;
        for (int j = a[i]; j > 0; j--) {
            for (int K = 1; K <= m; K++) {
                dp[j / K] = min(dp[j / K], dp[j] + c[K]);
            }
        }
        for (int j = 0; j <= x; j++) {
            cur = min(cur, dp[j]);
        }
        ans += cur;
    }
    // cout << '\n';
    return ans;
}

void solve() {
    cin >> n >> m >> k;

    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }

    sort(a, a + n);

    n -= n / 2;

    for (int i = 1; i <= m; i++) {
        cin >> c[i];
    }
    c[1] = 0;
    for (int i = m - 1; i > 0; i--) {
        c[i] = min(c[i], c[i + 1]);
    }

    for (int i = 2; i <= m; i++) {
        c[i] = min(c[i], c[i / ls[i]] + c[ls[i]]);
    }
    for (int i = m + 1; i <= m * 2; i++) {
        c[i] = 2e9;
    }


    for (int i = m - 1; i > 0; i--) {
        c[i] = min(c[i], c[i + 1]);
    }
/*

     for (int i = 0; i < m; i++) {
         cout << check(i) << '\n';
     }
*/

   int l = -1, r = m + 1;
    while (r - l > 1) {
        int mid = (l + r) >> 1;
        // cout << check(mid) << '\n';
        if (check(mid) <= k)
            r = mid;
        else
            l = mid;
    }

    cout << r << '\n';

    // cout << "_________\n";
}

int main() {
#ifndef LOCAL
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
#else
    freopen("input.txt", "r", stdin);
#endif
    for (int i = 2; i < N; i++) {
        if (ls[i] == 0) {
            ls[i] = i;
            pr.push_back(i);
        }
        for (int j = 0; j < sz(pr) && 1LL * pr[j] * i < N && pr[j] <= ls[i]; j++) {
            ls[pr[j] * i] = pr[j];
        }
    }
    int t;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

详细

Test #1:

score: 100
Accepted
time: 6ms
memory: 11468kb

input:

3
3 5 0
2 5 2
3 2 4 6 13
3 5 3
2 5 3
3 2 4 6 13
3 5 6
2 5 2
3 2 4 6 13

output:

2
2
1

result:

ok 3 number(s): "2 2 1"

Test #2:

score: 0
Accepted
time: 104ms
memory: 11040kb

input:

100000
5 10 5
3 7 1 10 10
11 6 11 6 1 8 9 1 3 1
5 6 51
2 2 2 5 1
42 61 26 59 100 54
5 10 76
7 5 8 4 7
97 4 44 83 61 45 24 88 44 44
5 8 90
1 1 5 1 3
35 15 53 97 71 83 26 7
5 3 52
1 1 3 1 1
22 6 93
5 6 28
6 6 1 3 1
9 31 2 19 10 27
5 8 31
3 6 2 1 2
32 29 13 7 57 34 9 5
5 6 75
3 3 4 5 4
40 56 38 60 17 3...

output:

0
2
0
0
0
0
0
0
3
4
0
0
0
0
1
1
0
0
0
0
1
1
0
2
2
0
0
0
0
0
2
0
0
0
2
2
0
1
0
0
0
0
1
0
2
4
1
1
0
0
2
0
0
7
0
1
0
0
0
1
1
0
1
0
1
0
0
2
1
0
6
3
0
0
1
0
2
0
0
3
0
1
0
1
0
2
0
0
0
0
1
2
1
4
0
0
0
0
0
0
1
2
2
1
2
2
0
1
1
0
0
0
0
0
1
2
1
4
1
0
4
1
2
1
0
0
0
0
1
2
1
0
0
2
3
1
0
1
1
1
0
1
5
0
1
2
0
2
0
0
...

result:

ok 100000 numbers

Test #3:

score: 0
Accepted
time: 80ms
memory: 10044kb

input:

30000
11 7 88
4 6 1 2 1 7 3 3 2 6 3
44 60 14 92 55 88 13
11 11 36
8 9 2 9 1 7 1 7 9 3 8
67 13 49 55 23 18 45 33 8 8 66
11 8 10
3 4 6 3 5 3 1 1 7 5 7
4 14 12 15 21 15 11 7
11 5 65
1 5 3 3 5 1 3 4 5 5 1
27 22 18 56 53
11 8 31
7 6 4 3 1 2 5 1 3 2 7
56 64 56 52 1 10 42 38
11 6 90
6 1 5 3 6 2 2 2 3 1 1
8...

output:

0
1
3
1
0
1
0
1
1
1
1
0
2
1
0
2
2
6
0
0
0
3
1
2
1
1
0
0
2
0
1
6
2
0
0
0
0
2
0
0
0
0
2
1
2
1
0
1
0
0
0
1
1
2
5
1
0
0
7
3
1
3
3
2
0
0
0
3
2
2
0
2
2
3
0
1
0
7
4
0
3
0
1
1
5
0
4
1
4
0
1
2
4
0
2
1
0
1
0
0
4
0
0
2
1
0
0
1
0
1
0
0
0
1
1
0
0
5
2
0
0
0
2
0
0
0
2
0
0
0
0
0
1
1
2
3
1
0
0
0
4
4
0
2
0
3
4
0
1
1
...

result:

ok 30000 numbers

Test #4:

score: 0
Accepted
time: 150ms
memory: 10472kb

input:

10000
21 2 301
2 1 1 2 1 1 1 2 1 2 2 2 2 2 2 2 1 2 1 1 2
91 73
21 16 233
1 6 6 8 10 10 9 3 8 8 8 7 11 6 7 11 9 13 13 11 11
29 88 36 42 98 53 65 44 31 58 27 36 34 51 33 26
21 35 699
11 33 22 24 34 33 24 16 5 12 8 26 34 4 1 33 10 3 9 21 10
56 27 39 44 44 53 75 14 57 20 51 69 85 15 29 50 76 79 37 6 17 ...

output:

1
6
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
11
0
0
0
0
1
0
0
0
0
3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
3
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
2
0
0
0
0
6
0
0
0
0
0
0
0
0
0
0
0
0...

result:

ok 10000 numbers

Test #5:

score: -100
Runtime Error

input:

10
99999 48959 549895809
17383 33522 48377 31386 19330 13043 27394 37249 36294 12722 8373 37625 12026 13690 14053 30528 16342 31971 17759 23330 19377 6906 2676 9898 35581 3357 38474 28896 7227 46575 20055 8860 38630 48009 37394 20074 31995 24762 36589 33677 5802 16186 22579 2830 43898 14963 41255 30...

output:


result: