记录编号 40637 评测结果 AAAAAA
题目名称 [暑假培训2012] 黑叔 最终得分 100
用户昵称 Gravatarcstdio 是否通过 通过
代码语言 C++ 运行时间 0.023 s
提交时间 2012-07-18 15:12:36 内存使用 0.62 MiB
显示代码纯文本
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("hey.in");//考虑到scanf容易跪
ofstream fout("hey.out");
struct request{
	long t;//time,主关键字
	char name[22];//名字,次关键字
	long d;//出去浮躁的时间
};//一律用long算了
struct request s[10002];
int n;
int compare(char ch1[],char ch2[]){//ch1大返回1,ch2大返回-1,相等返回0
	int i=0;
	while('a'<=ch1[i]&&ch1[i]<='z'&&'a'<=ch2[i]&&ch2[i]<='z'){
		if(ch1[i]>ch2[i]) return 1;
		if(ch1[i]<ch2[i]) return -1;
		i++;
	}
	return 0;
}
void qqsort(int low,int high){
	int i,j;
	struct request x,temp;
	i=low,j=high,x=s[low];
	while(i<=j){
		while((s[i].t<x.t||(s[i].t==x.t&&compare(x.name,s[i].name)==1))&&i<=high) i++;//找到需要交换的记录,条件只能为<
		while((s[j].t>x.t||(s[j].t==x.t&&compare(s[j].name,x.name)==1))&&j>=0) j--;//找到需要交换的记录,条件只能为>		
		if(i<=j){//交换记录
			temp=s[i];
			s[i]=s[j];
			s[j]=temp;
			i++;
			j--;//i++和j--放到这里:此乃关键!
		}
	}	
	if(low<j) qqsort(low,j);
	if(i<high) qqsort(i,high);
	//递归快排
}
void hangout(void){//一共n个犇
	int i;
	long end=0;
	for(i=0;i<n;i++){
		if(end<=s[i].t){//直接去
			fout<<s[i].name<<" went out at time "<<s[i].t<<endl;//祈使句本来应该用一般现在时的......
			end=s[i].t+s[i].d;
		}
		else{//得等
			fout<<s[i].name<<" went out at time "<<end<<endl;
			end+=s[i].d;
		}
	}
}
int main(){
	fin>>n;
	int i;
	for(i=0;i<n;i++){
		fin>>s[i].t>>s[i].name>>s[i].d;//读入请求
	}
	qqsort(0,n-1);
	hangout();
	fin.close();
	fout.close();
	return 0;
}