日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

中位数最大问题

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中位数最大问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題:

Description
Glory 是xd著名的 Sugar Daddy,他會給他的粉絲發糖,他現在有 n 個粉
, 每個粉絲手里有一定的數量的糖果,現在 Glory 又想給他們再發一些糖,一
m 顆,并希望發完糖之后所有粉絲擁有的糖果數量的中位數盡可能地大,所
以他想問你再給某些人發一些糖之后,中位數最多能提高到多少。
Input
多組數據,每一組數據第一行兩個正整數 n,m, 0 < n 100000; 0 < m < 106
接下來一行包含 n 個數,每個數 0 ai 100000 表示標號為 i 的粉絲手里
目前的糖果數量
為了方便計算,所有給出的 n 都將會是奇數。
Output
對于每一組數據,輸出一行包含一個數,表示粉絲擁有糖果數量的中位數在
Glory 再次發糖后最高能是多少。

對于給出的這n個數,我們首先應該對這n個數進行從小到大的排序。然后,假設我們能夠將中位數最大增加到x。所有比中位數小的數,也就是前n/2個數,都是沒有用的。要把中位數增加到x,我們就要把所有比中位數大的數,但是比x小的數的值增加到x。我們通過二分查找,找到第一個大于等于x的數,所有要增加的數,就是k∈[n/2,t)中的所有數,一共有t-n/2個。將這些數字增加到x所需要的糖果的數量是:

?

?

S是預先計算的前綴和:

C源碼:

1 #include<stdio.h> 2 int binaryFind(int a[],int low,int high,int target){ 3 int mid=(low+high)/2; 4 if(a[mid]>=target && a[mid-1]<target){ 5 return mid; 6 }else if(a[mid]>target){ 7 high=mid-1; 8 return binaryFind(a,low,high,target); 9 }else{ 10 low=mid+1; 11 return binaryFind(a,low,high,target); 12 } 13 if(low>high) 14 return -1; 15 } 16 void computePreSum(int a[],int length,int sum[]){ 17 for(int i=0;i<length;i++){ 18 for(int j=0;j<=i;j++){ 19 sum[i]=a[j]+sum[i]; 20 } 21 } 22 23 } 24 int needNum(int x,int sum[],int n,int t){ 25 //返回將中位數增加到x,所需要的糖果數 26 int r=(t-n/2+1)*x-(sum[t]-sum[n/2-1]) ; 27 return r; 28 } 29 int main(){ 30 int a[7]={1,2,3,4,6,7,8}; 31 //int result=binaryFind(a,0,5,5); 32 int n=7; 33 int sum[5]={0}; 34 int m=3;//糖果的總數 35 int result; 36 computePreSum(a,7,sum);//計算數組a的前綴和,存儲在sum數組中 37 int midNum=a[n/2]; 38 int x=midNum; 39 result=binaryFind(a,0,6,x); 40 while(needNum(x,sum,n,result)<=m){ 41 x++; 42 result=binaryFind(a,0,6,x); 43 } 44 printf("%d",x-1); 45 46 47 /*for(int i=0;i<5;i++){ 48 printf("%d ",sum[i]); 49 }*/ 50 // printf("%d",result); 51 }

?

?

?

?

?

轉載于:https://www.cnblogs.com/share-sjb/p/8889131.html

總結

以上是生活随笔為你收集整理的中位数最大问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。