给小红的签到题
題目描述
最近小紅很郁悶,她發現自己做題都不會,寫代碼還會有好多bug,于是她不停地求助帥大傻。在大傻的幫助下,小紅的水平不斷提高。于是,這一天大傻為了驗收小紅的學習成果,特地給她出了一道簽到題。為了讓小紅不再自閉,你能幫幫她嗎?
(大傻常常提醒小紅要細心讀題)?
給定一個數組a,其中有n個整數和一個整數s,保證n是奇數。
在一個操作中,可以將任何單個元素增加或減少1,計算使數組中值等于s所需的最小操作數。
奇數長度數組的中值是數組排序后位于中間位置的元素的值。例如,數組6,5,8的中值等于6,因為如果我們對這個數組排序,我們會得到5,6,8,而6位于中間位置。
?
?
輸入
第一行包含兩個整數n和s (1≤n≤2*10^5-1,1≤s≤10^9)——n為數組的長度,s為數組中值所需要等于的值。
第二行包含n個整數a1,a2,…,an(1≤ai≤10^9)——數組a的元素。
保證n是奇數。
?
?
輸出
在一行中輸出使數組中位數等于s的最小操作數。
樣例輸入
3 8 6 5 8樣例輸出
2提示
在樣例中,6可以增加2次變成8。數組將變為8,5,8,排序后變成5,8,8,因此中值等于8,所以輸出2。
?思路:先排序,找中位數,比較,依次加和。
代碼:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main() {long long int n,s,i,m,p,sum;int a[200007];cin>>n>>s;for(i=0; i<n; i++)cin>>a[i];sort(a,a+n);m=n/2;p=a[m];if(p<=s)sum=s-p;elsesum=p-s;for(i=m+1; i<n; i++)if(a[i]<s)sum+=(s-a[i]);cout<<sum<<endl;return 0; }?
總結
- 上一篇: iOS APP 反编译
- 下一篇: 经济适用男