虽然AC了,但是这题是不是还能hack啊()
查看原帖
虽然AC了,但是这题是不是还能hack啊()
724506
KumoKumo楼主2023/9/10 00:00

原因是我做题的时候从看到这道题到把这道题AC了都没想到要用二分,结果做完看题解清一色让用二分解决。初初做算法题,遇到这情况很兴奋啊,觉得自己搞出什么新东西了,然后看到三年前的触手@yummy击杀21篇题解之壮举(,第二批杀掉的和我思路差不多,因为才接触,算法分析能力不太行,就来问问什么情况。 我是从平均往下缩,当然也肯定不是像被毙掉的那样用枚举:

#include<iostream>
using namespace std;
int main(){
	int n;
	int k;
	int ac_k=0;
	int ans;
	int max_dis=0;
	scanf("%d",&n);
	scanf("%d",&k);
	int wood[n];
	long long sum=0;
	for(int i=0;i<n;i++){
		scanf("%d",&wood[i]);
		sum+=wood[i];
	}
	ans=sum/k;
	if(ans==0){
		cout<<0;
		return 0;
	}
	long long sub_need;
	for(int i=0;i<n;i++){
		ac_k+=wood[i]/ans;
			if(max_dis<wood[i]%ans){
				max_dis=wood[i]%ans;
				sub_need=wood[i]/ans+1;
			}
	}
	while(ac_k<k){
		if((ans-max_dis)%(sub_need)){
			ans-=(ans-max_dis)/(sub_need)+1;
		}else{
			ans-=(ans-max_dis)/(sub_need);
		}
		ac_k++;
		for(int i=0;i<n;i++){
			ac_k+=wood[i]/ans;
			if(max_dis<wood[i]%ans){
				max_dis=wood[i]%ans;
				sub_need=wood[i]/ans+1;
			}
		}
	}
	cout<<ans;
	return 0;
}
2023/9/10 00:00
加载中...