首页 > 其他 > 详细

1175C.Electrification(尺取)

时间:2020-04-13 19:11:43      阅读:104      评论:0      收藏:0      [点我收藏+]

在OX轴上给您n个点a1,a2,…,an。现在,要求您在OX轴上找到这样一个整数点x,使得fk(x)最小可能。

函数fk(x)可以用以下方式描述:

形成距离列表d1,d2,…,dn,其中di = | ai-x | (ai和x之间的距离);
以降序对列表d进行排序;
结果是dk + 1。
如果有多个最佳答案,则可以打印其中的任何一个。

题解:

从左到右遍历每组连续的K个点,每组顶点的最左和最右元素的距离除2就是第K大的最小值,取最小即可。

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+100;
int T;
int a[maxn];
int main () {
    scanf("%d",&T);
    int N,K;
    while (T--) {
        scanf("%d%d",&N,&K);
        for (int i=1;i<=N;i++) scanf("%d",&a[i]);
        int l=1;
        int r=K+1;
        int ans=0;
        int Min=1e9;
        while (l<=N-K) {
            int mid=(a[l]+a[r])>>1;
            int nowX=a[r]-mid;
            if (nowX<Min) {
                Min=nowX;
                ans=mid;
            }
            l++,r++;
        }
        printf("%d\n",ans);
    }
}

 

1175C.Electrification(尺取)

原文:https://www.cnblogs.com/zhanglichen/p/12693137.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!