QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#647293#8242. V-DiagramCalculatelove#TL 1ms5968kbC++141.1kb2024-10-17 13:14:422024-10-17 13:15:06

Judging History

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

  • [2024-10-17 13:15:06]
  • 评测
  • 测评结果:TL
  • 用时:1ms
  • 内存:5968kb
  • [2024-10-17 13:14:42]
  • 提交

answer

#include <bits/stdc++.h>

typedef long long s64;

const int N = 300100;

const double eps = 1e-11;
const s64 inf = 1e18;

int n;

int a[N];
double pre[N];

int p;

bool check(double mid) {
    for (int i = 1; i <= n; i ++)
        pre[i] = pre[i - 1] + a[i] - mid;

    double maxx = -inf, minn = inf;
    for (int i = 1; i < p; i ++)
        minn = std::min(minn, pre[i - 1]);

    for (int i = p + 1; i <= n; i ++)
        maxx = std::max(maxx, pre[i]);

    if (maxx - minn > 0)
        return 1;
    else
        return 0;
}

void work() {
    scanf("%d", &n);

    for (int i = 1; i <= n; i ++)
        scanf("%d", &a[i]);

    for (int i = 2; i < n; i ++)
        if (a[i - 1] > a[i] && a[i] < a[i + 1]) {
            p = i;
            break;
        }

    double l = 1, r = 1e9;
    while (r - l > eps) {
        double mid = (l + r) / 2;
        if (check(mid)) l = mid; else r = mid;
    }

    printf("%.9lf\n", l);
}

int main() {
    int T;
    scanf("%d", &T);

    while (T --)
        work();
    
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 5968kb

input:

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

output:

6.750000000
5.833333333

result:

ok 2 numbers

Test #2:

score: -100
Time Limit Exceeded

input:

100000
3
948511478 739365502 813471668
3
881046825 27458122 398507422
3
987554257 399092415 924260278
3
984128569 125199021 716360525
3
529589236 45783262 313507287
3
645443456 85994112 226010681
3
914820717 228360911 572267310
3
418958362 56703604 195276041
3
64461646 26764720 26995581
3
914535039 ...

output:


result: