求调,悬赏5RMB
查看原帖
求调,悬赏5RMB
652816
saixingzhe楼主2023/9/24 21:43
#include<bits/stdc++.h>
using namespace std;//0男 1女 
int n,m,c,d,e,h,si,sj,sh,sm,ss,lh,lm,ls,step; 
double Long;
char b,f;
const int lsm[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
map<int,bool>msex;
map<int,int>sunnyrun;
struct Node{
	int name,score,pactice;
	bool sex;
}a[10001];
struct lr{
	int MM,DD,hh,mm,ss;
};
map<int,lr>mlr;
bool cmp(Node x,Node y){
	return x.name<y.name; 
}
int cal(int a,int b,int c){return a*3600+b*60+c;}
int longrun(int a,int b,bool Sex){
	int w=a*60+b;
	if(!Sex){
		if(w<=750) return 20;
		if(w<=780) return 18;
		if(w<=810) return 16;
		if(w<=840) return 14;
		if(w<=870) return 12;
		if(w<=910) return 10;
		if(w<=950) return 8;
		if(w<=990) return 6;
		if(w<=1030) return 4;
		if(w<=1080) return 2;
	}
	else{
		if(w<=400) return 20;
		if(w<=417) return 18;
		if(w<=434) return 16;
		if(w<=451) return 14;
		if(w<=470) return 12;
		if(w<=485) return 10;
		if(w<=500) return 8;
		if(w<=515) return 6;
		if(w<=530) return 4;
		if(w<=540) return 2;
	}
	return 0;
}
int sunnylr(int x){
	if(x>=21)	return 10;
	if(x>=19)	return 9;
	if(x>=17)	return 8;
	if(x>=14)	return 7;
	if(x>=11)	return 6;
	if(x>=7)	return 4;
	if(x>=3)	return 2;
	return 0;
}
int jihua(int x){
	if(x>=18)	return 5;
	if(x>=15)	return 4;
	if(x>=12)	return 3;
	if(x>=9)	return 2;
	if(x>=6)	return 1;
	return 0;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i].name);
		cin>>b;
		scanf("%d%d\'%d\"",&c,&d,&e);
		cin>>f;
		scanf("%d%d",&h,&a[i].pactice);
		if(b=='M') a[i].sex=0,msex[a[i].name]=0;
		else	a[i].sex=1,msex[a[i].name]=0;
		a[i].score=c+h+longrun(d,e,a[i].sex);
		if(f=='P') a[i].score+=10;
	}
	scanf("%d",&m);
	for(int i=1;i<=m;i++){
		scanf("%d%d%d:%d:%d%d:%d:%d%lf%d\'%d\"%d",&sj,&si,&sh,&sm,&ss,&lh,&lm,&ls,&Long,&d,&e,&step);
		if(!msex[si]&&Long<3.0||msex[si]&&Long<1.5||Long*1000.0/(cal(lh,lm,ls)-cal(sh,sm,ss))<2||Long*1000.0/(cal(sh,sm,ss)-cal(lh,lm,ls))>5||d*60+e>270||Long*1000.0/step>1.5) continue;
		if(mlr.find(si)==mlr.end()){
			sunnyrun[si]++;
			mlr[si]={(sj-20170000)/100,sj%100,lh,lm,ls};
			continue;
		}
		if((sj-20170000)/100!=mlr[si].MM){
			if((sj-20170000)/100-1!=mlr[si].MM){
				sunnyrun[si]++;
				mlr[si]={(sj-20170000)/100,sj%100,lh,lm,ls};
				continue;
			}
			else{
				if(sj%100!=1||mlr[si].DD!=lsm[mlr[si].MM]){
					sunnyrun[si]++;
					mlr[si]={(sj-20170000)/100,sj%100,lh,lm,ls};
					continue;
				}
				else if(86400+cal(lh,lm,ls)-cal(sh,sm,ss)<21600)continue;
			}
		}
		else if(sj%100!=mlr[si].DD){
			if(sj%100-1!=mlr[si].DD){
				sunnyrun[si]++;
				mlr[si]={(sj-20170000)/100,sj%100,lh,lm,ls};
				continue;
			}
			else if(86400+cal(lh,lm,ls)-cal(sh,sm,ss)<21600)continue;
		}
		else if(cal(lh,lm,ls)-cal(sh,sm,ss)<21600) continue;
		sunnyrun[si]++;
		mlr[si]={(sj-20170000)/100,sj%100,lh,lm,ls};
	}
	for(int i=1;i<=n;i++) a[i].score+=sunnylr(sunnyrun[a[i].name])+jihua(sunnyrun[a[i].name]+a[i].pactice);
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++){
		cout<<a[i].name<<' '<<a[i].score<<' ';
		if(a[i].score>=95) printf("A\n");
		else if(a[i].score>=90) printf("A-\n");
		else if(a[i].score>=85) printf("B+\n");
		else if(a[i].score>=80) printf("B\n");
		else if(a[i].score>=77) printf("B-\n");
		else if(a[i].score>=73) printf("C+\n");
		else if(a[i].score>=70) printf("C\n");
		else if(a[i].score>=67) printf("C-\n");
		else if(a[i].score>=63) printf("D+\n");
		else if(a[i].score>=60) printf("D\n");
		else printf("F\n");
	}
	return 0;
}
2023/9/24 21:43
加载中...