求助,贪心算法11TLE
查看原帖
求助,贪心算法11TLE
1098818
pbjyeee楼主2024/5/5 22:35

11点hack数据原先代码是能通的,但是把bug修好之后hack就tle了 以及,我在做贪心算法的题单前没看贪心算法概念,所以这个可能不是贪心算法的解 改之前3×114514是100010,2233×33是100010和200020

#include<iostream>
#include<algorithm>
using namespace std;
int main(){
	int n,lst[3*114514]={0},save[2233*33]={0},ans=114514*114,sav2=0;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>lst[i];
	}
	sort(lst,lst+n);
	int now=lst[0],sav=0;
	for(int i=0;i<n;i++){
		if(lst[i]==now){
			save[sav]+=1;
		}
		else if(lst[i]==now+1){
			now+=1;sav+=1;save[sav]+=1;n+=1;
		}
		else{
			sav+=2;now=lst[i];save[sav]+=1;
		}
	}
	now=0;int inn=0;
	//for(int i=0;i<sav;i++){
	//cout<<save[i]<<' ';
	//}
	for(int i=0;i<sav;i++){
		if(save[i]!=0){
			now+=1;save[i]-=1;
		}
		else if(save[i]==0){
			i++;ans=min(ans,now);now=0;continue;
		}
		if(save[i]!=0&&inn==0){
			sav2=i;
			inn=1;
		}
		if(save[i]>=save[i+1]){
			ans=min(ans,now);
			if(inn==1){
				i=sav2-1;
			}else
				i++;
			now=0;inn=0;
		}
	}
	cout<<ans;
}
2024/5/5 22:35
加载中...