样例全过,提交全TLE,求助
查看原帖
样例全过,提交全TLE,求助
690127
Xuzhenan520楼主2023/7/28 16:19
#include<math.h>
#include<iostream>
#include<map>
using namespace std;
int n;  //n为n组数据 
int m,longer,sum=0,maxx=0,minn=999999; //longer为长度,sum为仓库里的值,maxx和minn为减少循环次数; 
map<int,bool>box;
inline int read(){   //快读 
	char c=getchar();int x=0,f=1;
	for(;!isdigit(c);c=getchar()){	
		if(c=='-'){		
			f=-1;	
		}	
	}
	for(;isdigit(c);c=getchar()){	
		x=x*10+c-'0';	
	}
	return x*f;
}
void store(int Length){  //存放函数 
	if(box[Length]){ //如果仓库里有同样长度的木条输出 Already Exist
		cout<<"Already Exist"<<endl;
		return ;		
	} 
	box[Length]=1; //否则标记 
	sum++; //木材数加一 
	return ;	
}
void print(int Length){  //输出函数 
	if(sum==0) cout<<"Empty"<<endl;  //仓库里木材时输出Empty 
	else if(box[Length]){  //如该长度有货则输出 
		cout<<Length<<endl;
		box[Length]=0; //标记 
		sum--;	 
	}
	else{ //否则判断最接近的数 
		int big=999999,small=0;  //big为大与此长度的数,small为小于此长度的数 
		for(int i=minn;i<=maxx;i++){ 
			if(i>Length&&box[i]==1) big=min(big,i); //寻找接近的数	
			if(i<Length&&box[i]==1) small=max(small,i);
		}
		if((big-Length)==(Length-small)){ //如果big和small一样那么输出小者 
			cout<<small<<endl;
			box[small]=0;
			sum--;	
		}
		else if((big-Length)>(Length-small)){
			cout<<small<<endl;
			box[small]=0;
			sum--;
		}
		else{
			cout<<big<<endl;
			box[big]=0;
			sum--;
		}
	}
	return ;
}
int main(){
	n=read(); //读入n,表示有n组数据 
	while(n--){	
		m=read();
		longer=read();
		maxx=max(maxx,longer);//减少循环次数 
		minn=min(minn,longer);
		if(m==1) store(longer); //如果m==1,那么调用存储函数 
		else print(longer); //反之调用输出函数 
	}	
}
2023/7/28 16:19
加载中...