QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#703550#9540. Double 11ucup-team173#TL 408ms6036kbC++203.1kb2024-11-02 17:57:222024-11-02 17:57:25

Judging History

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

  • [2024-11-02 17:57:25]
  • 评测
  • 测评结果:TL
  • 用时:408ms
  • 内存:6036kb
  • [2024-11-02 17:57:22]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using db = double;
const int maxn = 211111;
int n, m;

ll s[maxn];
db calc(int l, int r) {
    assert(1 <= l && l <= r && r <= n);
    return sqrt(1. * (r - l + 1) * (s[r] - s[l - 1]));
}
void solve() {
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> s[i];
    }
    sort(s + 1, s + n + 1);
    for (int i = 1; i <= n; i++) {
        s[i] += s[i - 1];
    }
    db l = -1e9, r = 1e9;
    int timer = 1000;
    vector<db> dp(n + 1);
    vector<int> dpt(n + 1);
    while (r - l >= 1e-11) {
        db mid = (l + r) * 0.5;
        cerr << "wtf\n";
        static int q[maxn], lim[maxn];
        int h = 1, t = 1;
        q[1] = 0;
        // for (int i = 1; i <= n; i++) {
        //     dp[i] = 1e9;
        //     for (int j = 0; j < i; j++) {
        //         if (dp[j] + calc(j + 1, i) - mid <= dp[i]) {
        //             dp[i] = dp[j] + calc(j + 1, i) - mid;
        //             dpt[i] = dpt[j] + 1;
        //         }
        //     }
        // }
        // cerr << mid << "\n";
        for (int i = 1; i <= n; i++) {
            cerr << i << " adso\n";
            while (h + 1 <= t) {
                if (dp[q[h]] + calc(q[h] + 1, i) >= dp[q[h + 1]] + calc(q[h + 1] + 1, i)) {
                    h++;
                } else
                    break;
            }
            cerr << i << " upd from " << q[h] << " cur mid is " << mid << " \n";
            dp[i] = dp[q[h]] + calc(q[h] + 1, i) - mid;
            dpt[i] = dpt[q[h]] + 1;
            int Ans;
            while (h + 1 <= t) {
                cerr << "jjjj\n";
                int L = i + 1, R = n;
                Ans = n + 1;
                while (L <= R) {
                    cerr << "wtf\n";
                    int MID = (L + R) >> 1;
                    if (dp[q[t]] + calc(q[t] + 1, MID) <= dp[i] + calc(i + 1, MID)) {
                        L = MID + 1;
                    } else {
                        Ans = MID;
                        R = MID - 1;
                    }
                }
                if (Ans <= lim[t])
                    t--;
                else
                    break;
            }
            {
                int L = i + 1, R = n;
                Ans = n + 1;
                while (L <= R) {
                    cerr << "wtf\n";
                    int MID = (L + R) >> 1;
                    if (dp[q[t]] + calc(q[t] + 1, MID) <= dp[i] + calc(i + 1, MID)) {
                        L = MID + 1;
                    } else {
                        Ans = MID;
                        R = MID - 1;
                    }
                }
            }
            ++t;
            lim[t] = Ans;
            q[t] = i;
        }
        if (dpt[n] <= m)
            l = mid;
        else
            r = mid;
    }
    cerr << dpt[n] << "\n";
    cout << fixed << setprecision(20) << dp[n] + m * l << "\n";
}
signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    int t = 1;
    // cin >> t;
    while (t--) solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 5864kb

input:

4 2
1 2 3 4

output:

6.19114712954097523578

result:

ok found '6.191147130', expected '6.191147130', error '0.000000000'

Test #2:

score: 0
Accepted
time: 3ms
memory: 6036kb

input:

10 3
1 2 3 4 5 6 7 8 9 10

output:

22.59162536649232322361

result:

ok found '22.591625366', expected '22.591625367', error '0.000000000'

Test #3:

score: 0
Accepted
time: 0ms
memory: 5912kb

input:

1 1
1

output:

1.00000000000000000000

result:

ok found '1.000000000', expected '1.000000000', error '0.000000000'

Test #4:

score: 0
Accepted
time: 0ms
memory: 5952kb

input:

1 1
100000

output:

316.22776603698730468750

result:

ok found '316.227766037', expected '316.227766017', error '0.000000000'

Test #5:

score: 0
Accepted
time: 0ms
memory: 5884kb

input:

7 1
10 47 53 9 83 33 15

output:

41.83300132669560866816

result:

ok found '41.833001327', expected '41.833001327', error '0.000000000'

Test #6:

score: 0
Accepted
time: 3ms
memory: 5972kb

input:

8 5
138 1702 119 1931 418 1170 840 1794

output:

233.90165455194357946311

result:

ok found '233.901654552', expected '233.901654552', error '0.000000000'

Test #7:

score: 0
Accepted
time: 16ms
memory: 5964kb

input:

58 1
888 251 792 847 685 3 182 461 102 348 555 956 771 901 712 878 580 631 342 333 285 899 525 725 537 718 929 653 84 788 104 355 624 803 253 853 201 995 536 184 65 205 540 652 549 777 248 405 677 950 431 580 600 846 328 429 134 983

output:

1355.26528768355910870014

result:

ok found '1355.265287684', expected '1355.265287684', error '0.000000000'

Test #8:

score: 0
Accepted
time: 16ms
memory: 3924kb

input:

88 30
67117 31903 93080 85196 16438 97116 11907 72959 83651 41273 52873 81892 81468 51323 99992 58869 54258 7183 87358 90990 80596 41252 90769 82705 61434 8524 13575 10787 53950 96768 12062 34637 27806 70937 69653 28380 90236 3352 27537 3873 91006 89790 25369 91825 82734 5588 4539 74118 47098 84741 ...

output:

18791.47535409410193096846

result:

ok found '18791.475354094', expected '18791.475354094', error '0.000000000'

Test #9:

score: 0
Accepted
time: 408ms
memory: 6004kb

input:

987 59
5209 1618 7129 7700 893 6647 8231 3314 9844 1347 6789 2711 3968 7416 5864 9190 9564 8874 7357 2087 530 8754 7935 6772 3475 8206 2898 2717 9252 8686 6604 5188 7451 9977 9366 7618 6294 6454 3919 3232 8164 8403 8617 2191 5257 626 8554 1952 1727 4759 205 9453 3312 9387 4798 7774 7005 8892 3570 50...

output:

66075.50858705423888750374

result:

ok found '66075.508587054', expected '66075.508587055', error '0.000000000'

Test #10:

score: 0
Accepted
time: 187ms
memory: 5900kb

input:

572 529
48392 84311 16267 29255 52276 20511 75195 95522 64489 52229 74478 69766 41777 25148 59976 66512 62953 16779 69312 98832 96131 94700 46403 58028 12868 83503 80367 51036 63398 7509 55193 76715 29143 75925 89863 89244 5561 21242 9047 89763 78016 86274 11382 88520 72343 29729 70986 86600 43707 7...

output:

119849.32268175482749938965

result:

ok found '119849.322681755', expected '119849.322681758', error '0.000000000'

Test #11:

score: -100
Time Limit Exceeded

input:

6133 2231
2292 4026 3420 3246 5243 41 4223 468 682 5008 1497 584 1573 7049 5848 4129 5555 9957 9311 7225 6065 9498 3569 1695 717 1968 9690 7557 8700 9427 5142 371 8788 2260 9576 2674 4322 7448 5829 9123 982 7591 438 1590 9459 5982 5002 243 4144 4254 9585 9988 6745 3691 9602 2297 9518 1181 9814 1746 ...

output:


result: