0分求调
查看原帖
0分求调
1278786
lihaoyyy楼主2024/7/15 15:31
#include<bits/stdc++.h>
using namespace std;
int n,m;
map<long long,int>a;
int dm[17]={0,0,31,59,90,120,151,181,212,243,273,304,334,365};
struct node
{
	long long number;//学号 
	bool Gender;//性别 用1,0表示 
//从左向右分别为 体育课成绩,长跑成绩,体质测试成绩,阳光长跑成绩,期末检测成绩,出勤成绩,大一专项成绩(由前两个组成),总成绩 
	int PEclassGr,longrunGr,bodyGr,sunshineGr,endGr,gooutGr,firstGr,allGr;
//从左向右分别为 出勤次数,训练营次数,阳光长跑次数 
	int gooutTi,campTi,sunshineTi;
	int days;//目前最后一次阳光长跑的时间 
}id[100005];

int count(int h,int m,int s,int hh,int mm,int ss)
{
	return hh*60*60+mm*60+ss-h*60*60-m*60-s;
}

int goout(int j){
	if(j>=18)return 5;
	if(j>=15)return 4;
	if(j>=12)return 3;
	if(j>=9)return 2;
	if(j>=6)return 1;
	return 0;
}

void jinitaimei(int j){
		if(j >= 95 && j <= 100) puts("A");
		else if(j >= 90 && j < 95) puts("A-");
		else if(j >= 85 && j < 90) puts("B+");
		else if(j >= 80 && j < 85) puts("B");
		else if(j >= 77 && j < 80) puts("B-");
		else if(j >= 73 && j < 77) puts("C+");
		else if(j >= 70 && j < 73) puts("C");
		else if(j >= 67 && j < 70) puts("C-");
		else if(j >= 63 && j < 67) puts("D+");
		else if(j >= 60 && j < 63) puts("D");
		else puts("F");
}

int sun(int j){
	if(j>=21)return 10;
	if(j>=19)return 9;
	if(j>=17)return 8;
	if(j>=14)return 7;
	if(j>=11)return 6;
	if(j>=7)return 4;
	if(j>=3)return 2;
	return 0;
}

void sunshinerungrade(int mon,int dat,int num,int h1,int m1,int s1,int h2,int m2,int s2,float lon,int fre,int s)
{
	int x=a[num];
	if((id[x].Gender==0&&lon<=1500)||(id[x].Gender==1&&lon<=3000))return ;
	float tl=count(h1,m1,s1,h2,m2,s2);
	if((lon/tl)<2||(lon/tl)>5)return ;
	if(fre>270)return ;
	if(lon/s>1.5)return ;
	long long now=(dm[mon]+dat-1)*24*60*60+h1*60*60+m1*60+s1;
	if(now-id[x].days<6*60*60)return ;
	id[x].sunshineTi++;
	id[x].days=(dm[mon]+dat-1)*24*60*60+h2*60*60+m2*60+s2;
}

int longrungrade(bool g,int time)
{
	if(g==0){
		if(time<=400)return 20;
		if(time<=417)return 18;
		if(time<=434)return 16;
		if(time<=451)return 14;
		if(time<=470)return 12;
		if(time<=485)return 10;
		if(time<=500)return 8;
		if(time<=515)return 6;
		if(time<=530)return 4;
		if(time<=540)return 2;
		return 0;
	}
	if(g==1){
		if(time<=750)return 20;
		if(time<=780)return 18;
		if(time<=810)return 16;
		if(time<=840)return 14;
		if(time<=870)return 12;
		if(time<=910)return 10;
		if(time<=950)return 8;
		if(time<=990)return 6;
		if(time<=1030)return 4;
		if(time<=1080)return 2;
		return 0;
	}
}

void read1()
{
	cin>>n;
	char gen,body;
	for(int i=1;i<=n;i++){
		cin>>id[i].number;
		a[id[i].number]=i;
		id[i].days=-0x3f3f3f3f;
		cin>>gen;
		if(gen=='M')id[i].Gender=1;else id[i].Gender=0;
		cin>>id[i].PEclassGr;
		int m,s;
		scanf("%d'%d\"",&m,&s);
		id[i].longrunGr=longrungrade(id[i].Gender,60*m+s);
		cin>>body;
		if(body=='P')id[i].bodyGr=10;else id[i].bodyGr=0;
		cin>>id[i].endGr>>id[i].campTi;
	}
}

void read2(){
	cin>>m;
	long long d,num,hstart,mstart,sstart,hend,mend,send;
	float l;
	int aa,bb,s;
	for(int i=1;i<=m;i++){
		cin>>d>>num;
		scanf("%d:%d:%d",&hstart,&mstart,&sstart);
		scanf("%d:%d:%d",&hend,&mend,&send);
		cin>>l;
		scanf("%d'%d\"",&aa,&bb);
		cin>>s;
		sunshinerungrade(d%10000/100,d%1000000,num,hstart,mstart,sstart,hend,mend,send,l*1000,aa*60+bb,s);
	}
}

void out()
{
	for(int i=1;i<=n;i++){
		id[i].gooutTi=id[i].sunshineTi+id[i].campTi;
		id[i].gooutGr=goout(id[i].gooutTi);
		id[i].firstGr=id[i].endGr+id[i].gooutGr;
		id[i].sunshineGr=sun(id[i].sunshineTi);
		id[i].allGr=id[i].bodyGr+id[i].firstGr+id[i].longrunGr+id[i].sunshineGr+id[i].PEclassGr;
		cout<<id[i].number<<" "<<id[i].allGr<<" ";
		jinitaimei(id[i].allGr);
		cout<<endl;
	}
}

int main(){
	read1();//第一部分读入 
	read2();//第二部分读入 
	out();//输出 
	return 0;
}
2024/7/15 15:31
加载中...