QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#704442#9540. Double 11ucup-team3510#WA 3ms5988kbC++141.4kb2024-11-02 19:59:322024-11-02 19:59:33

Judging History

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

  • [2024-11-02 19:59:33]
  • 评测
  • 测评结果:WA
  • 用时:3ms
  • 内存:5988kb
  • [2024-11-02 19:59:32]
  • 提交

answer

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;
typedef long double ld;

const int N = 2e5 + 5, B = 100;
int s[N], n, m;
ll sum[N];
ld dp[N];
int cnt[N];
pair<int, int> stk[N];
int top;
ld val(int l, int r)
{
	return sqrtl((sum[r] - sum[l]) * (r - l));
}
int calc(ld x)
{
	int i, l, r, mid;
	top = 0;
	stk[++top] = make_pair(0, 0);
	for(i = 1; i <= n; i++)
	{
		l = 1;
		r = top;
		while(l <= r)
		{
			mid = (l + r) >> 1;
			if(stk[mid].second > i)
				r = mid - 1;
			else
				l = mid + 1;
		}
		dp[i] = dp[stk[r].first] + val(stk[r].first, i) + x;
		cnt[i] = cnt[stk[r].first] + 1;
		while(top && stk[top].second >= i && dp[stk[top].first] + val(stk[top].first, stk[top].second) > dp[i] + val(i, stk[top].second))
			top--;
		l = max(stk[top].second, i);
		r = n;
		while(l <= r)
		{
			mid = (l + r) >> 1;
			if(dp[stk[top].first] + val(stk[top].first, mid) > dp[i] + val(i, mid))
				r = mid - 1;
			else
				l = mid + 1;
		}
		stk[++top] = make_pair(i, l);
	}
	return cnt[n];
}

int main()
{
	int i;
	ld l, r, mid;
	scanf("%d%d", &n, &m);
	for(i = 1; i <= n; i++)
		scanf("%d", s + i);
	sort(s + 1, s + n + 1);
	for(i = 1; i <= n; i++)
		sum[i] = sum[i - 1] + s[i];
	l = 0;
	r = 1e9;
	for(i = 0; i < B; i++)
	{
		mid = (l + r) / 2;
		if(calc(mid) <= m)
			r = mid;
		else
			l = mid;
	}
	printf("%.100Lf\n", dp[n] - m * l);
	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

input:

4 2
1 2 3 4

output:

6.1911471295571194840487438959542032534955069422721862792968750000000000000000000000000000000000000000

result:

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

Test #2:

score: 0
Accepted
time: 1ms
memory: 3944kb

input:

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

output:

22.5916253665141285849465857538120872050058096647262573242187500000000000000000000000000000000000000000

result:

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

Test #3:

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

input:

1 1
1

output:

1.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

result:

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

Test #4:

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

input:

1 1
100000

output:

316.2277660168379332106258772228102316148579120635986328125000000000000000000000000000000000000000000000

result:

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

Test #5:

score: 0
Accepted
time: 1ms
memory: 4016kb

input:

7 1
10 47 53 9 83 33 15

output:

41.8330013267037773977419234938679437618702650070190429687500000000000000000000000000000000000000000000

result:

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

Test #6:

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

input:

8 5
138 1702 119 1931 418 1170 840 1794

output:

233.9016545519435838484945122672797879204154014587402343750000000000000000000000000000000000000000000000

result:

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

Test #7:

score: -100
Wrong Answer
time: 3ms
memory: 3992kb

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:

1324.6306633900925825431116322761226911097764968872070312500000000000000000000000000000000000000000000000

result:

wrong answer 1st numbers differ - expected: '1355.2652877', found: '1324.6306634', error = '0.0226042'