玄三关!!0pts RE 求调
查看原帖
玄三关!!0pts RE 求调
970132
Hero_Broom楼主2024/6/3 09:06
#include<bits/stdc++.h>
using namespace std;
int string_to_int(string);
int day_to_int(string s){
	s.erase(0,4);
	int mon=string_to_int(s.substr(0,2)),day=string_to_int(s.substr(2,2));
	int month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
	int res=0;
	for(int i=1;i<=mon-1;i++) res+=month[i];
	res+=day;
	return res;
}
struct record{
	string date;
	string number;
	string start_time,end_time;
	int total_time;
	void get_total_time(){
		//20:12:14~21:06:08
		int sh,sm,ss;
		int eh,em,es;
		int th,tm,ts;
		sh=string_to_int(start_time.substr(0,2));
		sm=string_to_int(start_time.substr(3,2));
		ss=string_to_int(start_time.substr(6,2));
		eh=string_to_int(end_time.substr(0,2));
		em=string_to_int(end_time.substr(3,2));
		es=string_to_int(end_time.substr(6,2));
		th=eh-sh;
		th=tm=ts=0;
		if(ss>es){
			ts=es+60-ss;
			tm-=1;
		}else ts=es-ss;
		if(sm>em){
			tm=tm+em+60-sm;
			th-=1;
		}else tm=tm+em-sm;
//		printf("total_time:%d:%d:%d\n",th,tm,ts);
		total_time=th*3600+tm*60+ts;
	}
	double run_dis;
	int pause_time;
	int step_num;
};
struct student{
	string number;
	bool male;
	int P_E_score;
	int long_run_time,long_run_score;
	vector<record> run_re;
	int sunny_run_score;
	int ok_time,class_training_time;
	void get_sunny_run_score(){
		ok_time=0;
		for(int i=0;i<=run_re.size();i++){
			if(male) if(run_re[i].run_dis<3) continue;
			else if(run_re[i].run_dis<1.5) continue;
			if(run_re[i].run_dis*1000/run_re[i].total_time<2||run_re[i].run_dis*1000/run_re[i].total_time>5) continue;
			if(run_re[i].pause_time>270) continue;
			if(run_re[i].run_dis*1000/run_re[i].step_num>1.5) continue;
			if(i==0){
				ok_time++;
				continue;
			}
			if(run_re[i].date!=run_re[i-1].date){
				if(day_to_int(run_re[i].date)-day_to_int(run_re[i-1].date)>1){
					ok_time++;
					continue;
				}
				if(string_to_int(run_re[i].start_time.substr(0,2))+24-string_to_int(run_re[i-1].end_time.substr(0,2))>=6) ok_time++;
				/*
				if(
				string_to_int(run_re[i].start_time.substr(0,2))>=6||
				string_to_int(run_re[i-1].start_time.substr(0,2))<18||
				string_to_int(run_re[i-1].start_time.substr(0,2))==18&&
				string_to_int(run_re[i-1].start_time.substr(3,2))==0&&
				string_to_int(run_re[i-1].start_time.substr(6,2))==0
				){
					ok_time++;
					continue;
				}
				*/
			}else{
				if(string_to_int(run_re[i].start_time.substr(0,2))-string_to_int(run_re[i-1].end_time.substr(0,2))>=6) ok_time++;
			}
		}
		if(ok_time<=2) sunny_run_score=0;
		else if(ok_time<=6) sunny_run_score=2;
		else if(ok_time<=10) sunny_run_score=2;
		else if(ok_time<=13) sunny_run_score=6;
		else if(ok_time<=16) sunny_run_score=7;
		else if(ok_time<=18) sunny_run_score=8;
		else if(ok_time<=20) sunny_run_score=9;
		else sunny_run_score=10;
	}
	int body_score;
	int go_out,go_out_score,final_exam;
	int total;
	string grade;
};
int n,m;
student st[10010];
string tmp;
record rp;
inline int pow10_(int t){
	int res=1;
	while(t--) res*=10;
	return res;
}
int string_to_int(string s){
	int res=0;
	for(int i=s.size()-1,j=0;i>=0;i--,j++) res+=(s[i]-'0')*pow10_(j);
	return res;
}
int get_running_time(string s){
	string ttmp="";
	int i=0,res=0;
	while(s[i]!='\'') ttmp+=s[i],i++;
	res+=string_to_int(ttmp)*60;
	i++;
	ttmp="";
	while(s[i]!='"') ttmp+=s[i],i++;
	res+=string_to_int(ttmp);
	return res;
}
void save_student_information(int t){
	int i=0;
	string ttmp="";
	while(tmp[i]!=' ') ttmp+=tmp[i],i++;
	i++;
	st[t].number=ttmp;
	ttmp="";
	while(tmp[i]!=' ') ttmp+=tmp[i],i++;
	i++;
	st[t].male=(ttmp=="M");
	ttmp="";
	while(tmp[i]!=' ') ttmp+=tmp[i],i++;
	i++;
	st[t].P_E_score=string_to_int(ttmp);
	ttmp="";
	while(tmp[i]!=' ') ttmp+=tmp[i],i++;
	i++;
	st[t].long_run_time=get_running_time(ttmp);
	if(st[t].male){
		if(st[t].long_run_time>=1080) st[t].long_run_score=2;
		else if(st[t].long_run_time>=1030) st[t].long_run_score=4;
		else if(st[t].long_run_time>=990) st[t].long_run_score=6;
		else if(st[t].long_run_time>=950) st[t].long_run_score=8;
		else if(st[t].long_run_time>=910) st[t].long_run_score=10;
		else if(st[t].long_run_time>=870) st[t].long_run_score=12;
		else if(st[t].long_run_time>=840) st[t].long_run_score=14;
		else if(st[t].long_run_time>=810) st[t].long_run_score=16;
		else if(st[t].long_run_time>=780) st[t].long_run_score=18;
		else if(st[t].long_run_time>=750) st[t].long_run_score=20;
	}else{
		if(st[t].long_run_time>=540) st[t].long_run_score=2;
		else if(st[t].long_run_time>=530) st[t].long_run_score=4;
		else if(st[t].long_run_time>=515) st[t].long_run_score=6;
		else if(st[t].long_run_time>=500) st[t].long_run_score=8;
		else if(st[t].long_run_time>=485) st[t].long_run_score=10;
		else if(st[t].long_run_time>=470) st[t].long_run_score=12;
		else if(st[t].long_run_time>=451) st[t].long_run_score=14;
		else if(st[t].long_run_time>=434) st[t].long_run_score=16;
		else if(st[t].long_run_time>=417) st[t].long_run_score=18;
		else if(st[t].long_run_time>=400) st[t].long_run_score=20;
	}
	ttmp="";
	while(tmp[i]!=' ') ttmp+=tmp[i],i++;
	i++;
	st[t].body_score=10*(ttmp=="P");
	ttmp="";
	while(tmp[i]!=' ') ttmp+=tmp[i],i++;
	i++;
	st[t].final_exam=string_to_int(ttmp);
	ttmp="";
	while(tmp[i]!=' ') ttmp+=tmp[i],i++;
	i++;
	st[t].class_training_time=string_to_int(ttmp);
}
double string_to_double_2(string s){
	string ttmp="";
	int i=0;
	while(s[i]!='.') ttmp+=s[i],i++;
	i++;
	double res=string_to_int(ttmp);
	s=s+' ';
	ttmp="";
	while(s[i]!=' ') ttmp+=s[i],i++;
	res+=(string_to_int(ttmp)*0.01);
	return res;
}
bool cmp(student a,student b){
	return a.number<b.number;
}
int main(){
	scanf("%d",&n);
	getchar();
	for(int i=1;i<=n;i++){
		getline(cin,tmp);
		tmp=tmp+' ';
		save_student_information(i);
	}
	scanf("%d",&m);
	int pn;
	for(int i=1;i<=m;i++){
		string ttmp;
		cin>>tmp>>ttmp;
		rp.date=tmp;
		rp.number=ttmp;
		for(int j=1;j<=n;j++)
			if(st[j].number==ttmp){
				pn=j;
				break;
			}
		cin>>rp.start_time>>rp.end_time;
		cin>>ttmp;
		rp.run_dis=string_to_double_2(ttmp);
		cin>>ttmp;
		rp.pause_time=get_running_time(ttmp);
		cin>>ttmp;
		rp.step_num;
		rp.get_total_time();
		st[pn].run_re.push_back(rp);
	}
	for(int i=1;i<=n;i++){
		st[i].get_sunny_run_score();
		st[i].go_out=st[i].class_training_time+st[i].ok_time;
		if(st[i].go_out<=5) st[i].go_out_score=0;
		else if(st[i].go_out<=8) st[i].go_out_score=1;
		else if(st[i].go_out<=11) st[i].go_out_score=2;
		else if(st[i].go_out<=14) st[i].go_out_score=3;
		else if(st[i].go_out<=17) st[i].go_out_score=4;
		else st[i].go_out_score=5;
		st[i].total=st[i].P_E_score+st[i].sunny_run_score+st[i].long_run_score+st[i].body_score+st[i].final_exam+st[i].go_out_score;
		if(st[i].total>=95) st[i].grade="A+";
		else if(st[i].total>=90) st[i].grade="A";
		else if(st[i].total>=85) st[i].grade="B+";
		else if(st[i].total>=80) st[i].grade="B";
		else if(st[i].total>=77) st[i].grade="B-";
		else if(st[i].total>=73) st[i].grade="C+";
		else if(st[i].total>=70) st[i].grade="C";
		else if(st[i].total>=67) st[i].grade="C-";
		else if(st[i].total>=63) st[i].grade="D+";
		else if(st[i].total>=60) st[i].grade="D";
		else if(st[i].total>=0) st[i].grade="F";
	}
	sort(st+1,st+1+n,cmp);
	for(int i=1;i<=n;i++){
		cout<<st[i].number<<" "<<st[i].total<<" "<<st[i].grade<<endl;
	}
//	for(int i=1;i<=n;i++){
//		cout<<st[i].number<<"\t";
//		printf("%d\t%d\t%d\t%d\t%d\t%d\n",st[i].male,st[i].P_E_score,st[i].long_run_time,st[i].body_score,st[i].final_exam,st[i].class_training_time);
//	}
}
2024/6/3 09:06
加载中...