马蜂良好有注释,求条!!!
查看原帖
马蜂良好有注释,求条!!!
730192
gaomingyang101011楼主2025/8/3 20:28
#include<iostream>
#include<cstring>
#include<map>
#include<cmath>
using namespace std;
const long long N=1e4+5; 
map<string,long long> ans; // 总分数 
long long n;
string p[N]; // 学号 
map<string,char> xingbie;
//------------------------------------------------------------------------------------------ 
long long PEexam;
void Part1(int i){
	cin>>PEexam;
	ans[p[i]]+=PEexam;
} // 体育课专项成绩
//------------------------------------------------------------------------------------------ 
char runexam[6];
void Part2(int i){
	cin>>runexam;
	long long s=0;
	long long pd=0,si=1;
	for(int j=strlen(runexam)-2;j>=0;j--){
		if('0'<=runexam[j]&&runexam[j]<='9'){
			if(pd==0) s+=si*(runexam[j]-'0');
			else s+=60*si*(runexam[j]-'0');
			si*=10;
		}
		else si=1,pd=1;
	} // 跑步用时 
	if(xingbie[p[i]]=='M'){
		if(s<=750) ans[p[i]]+=20;
		else if(s<=780) ans[p[i]]+=18;
		else if(s<=810) ans[p[i]]+=16;
		else if(s<=840) ans[p[i]]+=14;
		else if(s<=880) ans[p[i]]+=12;
		else if(s<=920) ans[p[i]]+=10;
		else if(s<=960) ans[p[i]]+=8;
		else if(s<=1000) ans[p[i]]+=6;
		else if(s<=1040) ans[p[i]]+=4;
		else if(s<=1080) ans[p[i]]+=2;
	} // 男性 
	else{
		if(s<=400) ans[p[i]]+=20;
		else if(s<=417) ans[p[i]]+=18;
		else if(s<=434) ans[p[i]]+=16;
		else if(s<=451) ans[p[i]]+=14;
		else if(s<=470) ans[p[i]]+=12;
		else if(s<=485) ans[p[i]]+=10;
		else if(s<=500) ans[p[i]]+=8;
		else if(s<=515) ans[p[i]]+=6;
		else if(s<=530) ans[p[i]]+=4;
		else if(s<=540) ans[p[i]]+=2;
	} // 女性 
} //长跑测试成绩 
//------------------------------------------------------------------------------------------ 
char tizhi;
void Part3(int i){
	cin>>tizhi;
	if(tizhi=='P') ans[p[i]]+=10; 
} // 体质测试
//------------------------------------------------------------------------------------------ 
long long fexam;
void Part4(int i){
	cin>>fexam;
	ans[p[i]]+=fexam; 
} // 「大一专项计划」(期末检测成绩) 
//------------------------------------------------------------------------------------------ 
map<string,long long> c;
//------------------------------------------------------------------------------------------ 
long long m;
long long date;
string mp;
double km;
double bushu;
//------------------------------------------------------------------------------------------ 
const long long month[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
long long change1(long long date){
	long long mon=date/100%100-1;
	long long day=date%100-1;
	for(int i=1;i<=mon;i++)
		day+=month[i];
	return day;
} // 将时间转为距2017.1.1的天数 
//------------------------------------------------------------------------------------------ 
char starttime[10],endtime[10];
long long stime,etime;
void change2(){
	stime=0,etime=0;
	cin>>starttime>>endtime;
	stime+=((starttime[0]-'0')*10+(starttime[1]-'0'))*60*60;
	stime+=((starttime[3]-'0')*10+(starttime[4]-'0'))*60;
	stime+=((starttime[6]-'0')*10+(starttime[7]-'0'));
	etime+=((endtime[0]-'0')*10+(endtime[1]-'0'))*60*60;
	etime+=((endtime[3]-'0')*10+(endtime[4]-'0'))*60;
	etime+=((endtime[6]-'0')*10+(endtime[7]-'0'));
} // 将开始时间与结束时间转为秒数 
//------------------------------------------------------------------------------------------ 
long long tz;
char tingzhi[10];
void change3(){
	tz=0;
	cin>>tingzhi;
	long long pd=0,si=1;
	for(int j=strlen(tingzhi)-1;j>=0;j--){
		if('0'<=tingzhi[j]&&tingzhi[j]<='9'){
			if(pd==0) tz+=si*(tingzhi[j]-'0');
			else tz+=60*si*(tingzhi[j]-'0');
			si*=10;
		}
		else si=1,pd=1;
	} // 停止时间 
}
//------------------------------------------------------------------------------------------ 
map<string,long long> sunrun;
map<string,long long> lasttime;
bool pd1(char xb,double km){
	if(xb=='M'){
		if(km>=3.0) return true;
		return false;
	}
	else{
		if(km>=1.5) return true;
		return false;
	}
}
bool pd2(double km,double ti){
	double v=km/ti;
	if(2<=v&&v<=5) return true;
	return false;
}
bool pd3(double ting){
	if(ting<=270) return true;
	return false;
}
bool pd4(double km,double bushu){
	double bufu=km/bushu;
	if(bufu<=1.5) return true;
	return false;
}
bool pd5(long long lasttime,long long nowtime){
	if(nowtime-lasttime>=6*60*60) return true;
	return false;
}
void jssunrun(){
	if(pd1(xingbie[mp],km)&&pd2(km*1000,etime-stime)&&pd3(tz)&&pd4(km*1000,bushu)&&pd5(lasttime[mp],date+stime-etime)){
		lasttime[mp]=date;
		sunrun[mp]+=1;
	}
} // 统计每个人合法的阳光跑步次数 
//------------------------------------------------------------------------------------------ 
void Part5(int i){
	if(sunrun[p[i]]>=21) ans[p[i]]+=10;
	else if(sunrun[p[i]]>=19) ans[p[i]]+=9;
	else if(sunrun[p[i]]>=17) ans[p[i]]+=8;
	else if(sunrun[p[i]]>=14) ans[p[i]]+=7;
	else if(sunrun[p[i]]>=11) ans[p[i]]+=6;
	else if(sunrun[p[i]]>=7) ans[p[i]]+=4;
	else if(sunrun[p[i]]>=3) ans[p[i]]+=2;
} // 阳光长跑 
//------------------------------------------------------------------------------------------ 
void Part6(int i){
	long long s=sunrun[p[i]]+c[p[i]];
	if(s>=18) ans[p[i]]+=5;
	else if(s>=15) ans[p[i]]+=4;
	else if(s>=12) ans[p[i]]+=3;
	else if(s>=9) ans[p[i]]+=2;
	else if(s>=6) ans[p[i]]+=1;
} 
//------------------------------------------------------------------------------------------ 
void _cout(){
	for(int i=1;i<=n;i++){
		cout<<p[i]<<" "<<ans[p[i]]<<" ";
		if(ans[p[i]]>=95) cout<<"A";
		else if(ans[p[i]]>=90) cout<<"A-";
		else if(ans[p[i]]>=85) cout<<"B+";
		else if(ans[p[i]]>=80) cout<<"B";
		else if(ans[p[i]]>=77) cout<<"B-";
		else if(ans[p[i]]>=73) cout<<"C+";
		else if(ans[p[i]]>=70) cout<<"C";
		else if(ans[p[i]]>=67) cout<<"C-";
		else if(ans[p[i]]>=63) cout<<"D+";
		else if(ans[p[i]]>=60) cout<<"D";
		else cout<<"F";
		cout<<endl;
	}
}
//------------------------------------------------------------------------------------------ 
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>p[i],lasttime[p[i]]=-21601;
		cin>>xingbie[p[i]];
		Part1(i);
		Part2(i);
		Part3(i);
		Part4(i);
		cin>>c[p[i]]; 
	}
	cin>>m;
	while(m--){
		cin>>date;
		date=change1(date); 
		date=date*24*60*60; // 将天数转为秒钟 
		cin>>mp;
		change2();
		cin>>km;
		change3();
		cin>>bushu;
		jssunrun();
	}
	for(int i=1;i<=n;i++){
		Part5(i);
		Part6(i);
	}
	_cout();
    return 0;
}
2025/8/3 20:28
加载中...