QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#875683#9684. 倾诉testngifaicnslvthis0 7ms3968kbC++142.9kb2025-01-30 02:59:342025-01-30 02:59:35

Judging History

This is the latest submission verdict.

  • [2025-01-30 02:59:35]
  • Judged
  • Verdict: 0
  • Time: 7ms
  • Memory: 3968kb
  • [2025-01-30 02:59:34]
  • Submitted

answer

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

using i64 = long long;

#ifdef LOCAL
#include "debug.h"
#else
#define debug(...) 42
#endif

int main() {
    cin.tie(0)->sync_with_stdio(0);
    int T;
    cin >> T;
    while (T--) {
        int n, k;
        cin >> n >> k;
        vector<double> a(n);
        for (int i = 0; i < n; i++) {
            int x;
            cin >> x;
            a[i] = x;
        }
        k = min(k, n - 1);
        double left = 0, right = *max_element(a.begin(), a.end());
        vector<int> x(n), x_min(n);
        for (int iter = 0; iter < 100; iter++) {
            double mid = (left + right) / 2;
            bool ok = true;
            for (int i = 0; i < n; i++) {
                if (mid >= a[i]) {
                    x_min[i] = 0;
                } else {
                    double ratio = a[i] / mid;
                    x_min[i] = ceil(log2(ratio));
                }
            }
            x.back() = 0;
            for (int i = n - 2; i >= 0; i--) {
                x[i] = min(x[i + 1], x_min[i]);
                if (x[i] < x_min[i]) {
                    ok = false;
                    break;
                }
            }
            if (!ok) {
                left = mid;
                continue;
            }
            if (x[0] > k) {
                left = mid;
            } else {
                right = mid;
            }
        }
        double final_V = right;
        vector<int> final_x(n);
        for (int i = 0; i < n; i++) {
            if (final_V >= a[i]) {
                final_x[i] = 0;
            } else {
                double ratio = a[i] / final_V;
                final_x[i] = ceil(log2(ratio));
            }
        }
        final_x.back() = 0;
        for (int i = n - 2; i >= 0; i--) {
            final_x[i] = min(final_x[i + 1], final_x[i]);
        }
        int max_x = 0;
        double max_val = 0;
        for (int i = 0; i < n; i++) {
            int xi = final_x[i];
            double val = a[i] / (1LL << xi);
            if (val > max_val) {
                max_val = val;
            }
        }
        i64 numerator = 0;
        int exponent = 0;
        while (true) {
            i64 candidate = round(max_val * (1LL << exponent));
            if (abs(candidate / (double)(1LL << exponent) - max_val) < 1e-9) {
                numerator = candidate;
                break;
            }
            exponent++;
            if (exponent > 60) break;
        }
        while (exponent > 0 && (numerator % 2 == 0)) {
            numerator /= 2;
            exponent--;
        }
        string s;
        if (numerator == 0) {
            s = "0";
        } else {
            while (numerator > 0) {
                s += (numerator % 2) + '0';
                numerator /= 2;
            }
            reverse(s.begin(), s.end());
        }
        cout << s << '\n';
    }
}

详细

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 1ms
memory: 3840kb

input:

5
6 1
11764 28428 28179 18698 6443 20288
6 3
29 17548 61962 31242 8172 4107
6 15
7 2 239427 137145 171239 3
6 4
294 211 407 190 2 2
6 5
197190 265870 12121 144584 21313 14169

output:

110111100001100
1111001000001010
111010011101000011
110010111
1000000111010001110

result:

wrong answer 1st lines differ - expected: '110111100001100000000', found: '110111100001100'

Subtask #2:

score: 0
Skipped

Dependency #1:

0%

Subtask #3:

score: 0
Skipped

Dependency #2:

0%

Subtask #4:

score: 0
Skipped

Dependency #3:

0%

Subtask #5:

score: 0
Wrong Answer

Test #60:

score: 0
Wrong Answer
time: 3ms
memory: 3840kb

input:

1666
6 1
282 719 29 355 388 275
6 1
348 766 91 299 474 96
6 23
5 2 8554 8554 8554 2
6 1
84 195 23 37 120 117
6 3
8 3 51 62 28 5
6 3
3 64 64 4 4 2
6 9
5 552 552 552 552 5
6 3
3611 1144 417 3461 459 755
6 3
777 315 1007 5 2 1061
6 6
1300 2101 4 1877 360 2434
6 1
384 713 168 25 524 390
6 3
203 18 305 1...

output:

1011001111
1011111110
10000101101010
11000011
111110
1000000
1000101000
111000011011
10000100101
100110000010
1011001001
100110001
111001011010
100011000000
100110111111
10101011110
10111000
101101100
101110101100
1000000
1100000001101
110111111011
101101000
100000
10001000110111
10000100110
1000001...

result:

wrong answer 1st lines differ - expected: '110000100100000', found: '1011001111'

Subtask #6:

score: 0
Wrong Answer

Test #80:

score: 0
Wrong Answer
time: 7ms
memory: 3968kb

input:

3333
6 1000000000
131727 7 4 170194 6 59263
6 1000000000
417714 286613 7 310122 6 4
6 1000000000
63764 2430 2696 6699 8478 22261
6 1000000000
217 131 6 1487 2927 2
6 1000000000
26225 27991 3842 72525 4521 5231
6 1000000000
34409 26001 23563 19345 30764 24919
6 1000000000
97981 138532 59280 82393 128...

output:

101001100011010010
1100101111110110010
1111100100010100
101101101111
10001101101001101
1000011001101001
100001110100100100
101001011100111
11000001010010001111
1000000000
1000111010011100
1011101100101001110
10000000000000000
11010001101110
100110111010011101
10101010101101010
1000011001100001
11110...

result:

wrong answer 1st lines differ - expected: '10100110001101001000000', found: '101001100011010010'

Subtask #7:

score: 0
Skipped

Dependency #4:

0%