小明最近修了一面砖墙,由于修的急,这面墙修的高度参差不齐,也就是从左到右,砖墙由N列砖的组成,但每一列的砖的数量多少不一,从左到右每列砖的数量分别为a1,a2,...,an 。现在小明想修平整这面墙(当一面墙每一列的砖的数量都一样则这面墙是平整的),他的做法是用一辆铲车把多余的砖铲掉,铲车的运作方式是先把铲子升到H层砖的高度(地面的高度为0层砖),然后把这个高度以上的砖全铲掉,因为铲车的功率有限,每次最多只能铲掉K块砖,请计算一下,最少需要铲多少次,可以把墙修平整。
code:
#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
#define r register
int b[1111111],c[1111111];
int main(){
int n,k;
cin>>n>>k;
int a[n];
for(r int i=0;i<n;i++){
cin>>a[i];
for(r int j=0;j<a[i];j++){
++b[j];
}
}
for(r int i=1000000;i>=0;i--){
c[i]=c[i+1]+b[i];
}
int mx=*max_element(a,a+n),mn=mx-1;
int cnt=0;
while(mx>=0){
if(c[mn]-c[mx]<=k)--mn;
else{
++cnt;
mx=mn;
--mn;
}
}
cout<<cnt<<endl;
}
只有30pts WA了6个点 TLE 一个