• 板块灌水区
  • 楼主SM_929hz
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/1/21 10:21
  • 上次更新2025/1/21 13:10:58
查看原帖
1364135
SM_929hz楼主2025/1/21 10:21

站外题求条

蜡烛2 查看测评数据信息 小辉有n根蜡烛,第i根蜡烛的长度是h[i]。它想知道它的n根蜡烛最多能用多少个晚上。它每天晚上需要点燃c根蜡烛。每根被点燃的蜡烛,它燃烧一个晚上会使得它的长度减少1。一旦蜡烛的长度变成0,那么该根蜡烛就用完了。如果第i个晚上小辉发现蜡烛不够用了,那么小辉最多就只能用i-1个晚上。 输出最多能用多少个晚上。

输入格式

第一行:两个整数n,c。 第二行:n个整数,第i个整数表示第i根蜡烛的长度h[i]。

输出格式

一个整数,总共最多能用多少个晚上

输入/输出例子1 输入:

3 3 2 2 2

输出:

2

样例解释

【数据范围】 50%的数据,n,c<=1000 100%的数据,n,c<=1000000,1 <= h[i] <= 1000000

本蒟蒻的代码

#include<bits/stdc++.h>
using namespace std;
int n,a[50],c;
bool cmp(int a,int b){
	return a>b;
}
bool check(int k){
	for(int i=1;i<=k;i++){
		int o=0;
		for(int j=1;j<=n;j++){
			if(a[j]>0)
				o++;
			}
		if(o<c){
			return false; 
		}	
		for(int j=1,q=1;q<=c;j++){
			if(a[j]>0)
				a[j]--,q++;
		} 
    	sort(a+1,a+n+1,cmp);
	}
	return true;
}
int main(){
	cin>>n>>c;
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	sort(a+1,a+n+1,cmp);
	int l=-1,r=1000001;
	while(l+1<r){
		int mid=(l+r)/2;
		if(check(mid))
			l=mid;
		else r=mid;
	}
	cout<<l;  
    return 0;
} 
2025/1/21 10:21
加载中...