CF Gym-101911K Medians and Partition

Posted yanying7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF Gym-101911K Medians and Partition相关的知识,希望对你有一定的参考价值。

题目:https://vjudge.net/problem/Gym-101911K

题意:n为数组长度,ai为数组元素,求数组分成的最大组数,使得每一组在排序后的中位数大于等于m。(偶数长度的分组中位数为中间两个数的较小值)。

分析:容易知道比m大的数一组一个可以使分组最多。而对于比m小的数,我们先记录比m小的数的数量,然后通过计算可以知道,假设一组内比m小的数有k个,那么不小于m的数至少要有k+1个,从而得到结论:所有比m小的数放在一组,才能使比m大的数消耗最少,因此答案呼之欲出了。

 1 #include <stdio.h>
 2 int main(void){
 3     int num=0;
 4     int n,m;
 5     int x;
 6     scanf("%d %d",&n,&m);
 7     int k=n;
 8     while(k--){
 9         scanf("%d",&x);
10         if(x<m)num++;
11     }
12     //最大组数:n-num-num-1+1=n-2*num(要加回自己这一组,如果比0小就是0) 
13     printf("%d",n-num*2>0?n-num*2:0);
14     return 0;
15 }

 

以上是关于CF Gym-101911K Medians and Partition的主要内容,如果未能解决你的问题,请参考以下文章

CF-1350 D. Orac and Medians 思维

CF-1350 D. Orac and Medians 思维

CF1350D Orac and Medians(找规律)

B - Glider Gym - 101911B

Gym - 101911C Bacteria (规律题)

Gym - 101911B Glider(前缀和+二分)