专栏文章
题解:P12225 [蓝桥杯 2023 国 Java B] 游戏
P12225题解参与者 2已保存评论 2
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mink5n8z
- 此快照首次捕获于
- 2025/12/02 03:44 3 个月前
- 此快照最后确认于
- 2025/12/02 03:44 3 个月前
题目传送门
记 表示区间 的最大值, 表示区间 的最小值,因为每种方案选中的概率均为 ,可以得到答案为
考虑每个 和 对答案的贡献,显然 被当了 次被减数, 被当了 次减数,可将答案化简为
那么只需要快速求出 和 即可,使用单调队列或 st 表或线段树均可。这里我懒狗用
CPPstd::multiset 代替了单调队列做滑动窗口,时间复杂度 ,代码巨短。#include <bits/stdc++.h>
using namespace std;
#define il inline
typedef long long ll;
const int N = 1e5 + 10;
int a[N], n, k;
multiset<int> s;
int main()
{
cin >> n >> k;
for(int i = 1;i <= n;++i) cin >> a[i];
ll s1 = 0, s2 = 0;
for(int i = 1;i < k;++i) s.insert(a[i]);
for(int i = k;i <= n;++i)
{
s.insert(a[i]);
s1 += (*s.begin());
s2 += (*s.rbegin());
s.erase(s.find(a[i - k + 1]));
}
double ans = (s2 - s1) * 1.0 / (n - k + 1);
printf("%.2lf", ans);
return 0;
}
相关推荐
评论
共 2 条评论,欢迎与作者交流。
正在加载评论...