题解:AT_abc355_g [ABC355G] Baseball

F 题 Baseball

题意

  • 关键字

    1. Takahashi 选择了 K K K 个整数 x 1 , x 2 , … , x K x_1, x_2, \dots, x_K x1,x2,,xK

    2. Aoki 随机选择一个整数 y y y,其选择概率与数列 P P P 中对应元素的比例有关。

    3. Aoki 的得分为 min ⁡ i = 1 K ∣ x i − y ∣ \min{i=1}^{K} |xi - y| mini=1Kxiy

    4. Takahashi 的目标是使 Aoki 的得分期望值最小化。

    5. 输出 Aoki 得分期望值的最小值乘以 ∑ y ′ = 1 N P y ′ \sum{y'=1}^{N} P{y'} y=1NPy

分析

  • 策略

    1. 如果 Takahashi 选择 x 1 , x 2 , … , x K x_1, x_2, \dots, x_K x1,x2,,xK,则 Aoki 的得分期望值取决于这些点在数轴上的分布情况和概率加权。

    2. 最优策略通常涉及选择离散分布的中位数或平均值,以最小化距离的期望值。

  • 实现

    1. 对数列 P P P 进行排序,以便能够快速找到累积概率和中位数。

    2. 计算每个可能的 y y y 值对应的 Aoki 得分期望值。

    3. 选择使得期望值最小的 x 1 , x 2 , … , x K x_1, x_2, \dots, x_K x1,x2,,xK

    4. 使用前缀和数组加速计算累积概率。

    5. 使用双指针或类似的方法找到最小期望值。

    6. 最终计算输出结果。

code:

#include <bits/stdc++.h>
using namespace std;
int n, k;
int main() {
    cin >> n >> k;
    
    vector<int> p(n);
    for (int i = 0; i < n; ++i) {
        cin >> p[i];
    }
    
    sort(p.begin(), p.end());
    
    vector<long long> sum(n);
    sum[0] = p[0];
    for (int i = 1; i < n; ++i) {
        sum[i] = sum[i - 1] + p[i];
    }
    
    long long minn = LLONG_MAX;
    for (int i = 0; i <= n - k; ++i) {
        long long sump = sum[i + k - 1] - (i > 0 ? sum[i - 1] : 0);
        long long cnt = 0;

        cnt += (long long)p[i] * i;
        cnt += sump - (long long)p[i] * (i + k);
        minn = min(minn, cnt);
    }
    
    cout << minn << endl;
    return 0;
}
  • 16
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值