求助题目
查看原帖
求助题目
575655
Chtholly_is_cute楼主2023/7/23 22:52

小明最近修了一面砖墙,由于修的急,这面墙修的高度参差不齐,也就是从左到右,砖墙由N列砖的组成,但每一列的砖的数量多少不一,从左到右每列砖的数量分别为a1,a2,...,ana_1,a_2,...,a_n 。现在小明想修平整这面墙(当一面墙每一列的砖的数量都一样则这面墙是平整的),他的做法是用一辆铲车把多余的砖铲掉,铲车的运作方式是先把铲子升到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 一个

2023/7/23 22:52
加载中...