【悬关求调/Hack】好像哪里出了点小问题……
查看原帖
【悬关求调/Hack】好像哪里出了点小问题……
761125
Milthm楼主2023/4/29 20:51

大模拟……

#include<iostream>
#include<map>
#include<vector> 
using namespace std;
int N,M,c2[10005],inf=1e9+7;
int v(int a,int b){
	return a*60+b;
}
int m_cp[20]={0,v(18,0),v(17,10),v(16,30),v(15,50),v(15,10),v(14,30),v(14,0),v(13,30),v(13,0),v(12,30),inf};
int f_cp[20]={0,v(9,0),v(8,50),v(8,35),v(8,20),v(8,5),v(7,50),v(7,31),v(7,14),v(6,57),v(6,40),inf};
int ygcp[20]={0,3,3,7,7,11,11,14,17,19,21,inf};
int chuqin[20]={0,6,9,12,15,18,inf};
map<string,int>bianhao;
string BH[10005];
bool xingbie[10005];
int hefa[10005],sc[10005],last_time[10005];
struct node{
	int mon,day;
	int h,m,s,h2,m2,s2;
	double l;
	int zan,bushu;
};
vector<node>syx[10005];
int month[14]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int Time(int m,int d,int h,int m2,int s){
	int ans=0;
	for(int i=1;i<m;++i){
		ans+=month[i]*86400;
	}
	ans+=d*86400;
	ans+=h*3600+v(m2,s);
	return ans;
} 
int main(){
	cin>>N;
	for(int i=1;i<=N;++i){
		string p;
		int s,a,b,f;
		char c,o;
		cin>>p>>c>>s;
		scanf("%d\'%d\"",&a,&b);
		BH[i]=p;
		cin>>o>>f>>c2[i];
		sc[i]+=s+f;
		if(o=='P')sc[i]+=10;
		int ti=v(a,b);
		bianhao[p]=i;
		if(c=='M'){
			xingbie[i]=1;
			for(int j=1;;++j){
				if(ti>m_cp[j]){
					sc[i]+=j*2-2;
					break;
				}
			}
		}
		else{
			for(int j=1;;++j){
				if(ti>f_cp[j]){
					sc[i]+=j*2-2;
					break;
				}
			}
		}
	}
	cin>>M;
	for(int i=1;i<=M;++i){
		string s3,gg;
		int mon,day,h,m,s,h2,m2,s2;
		double l;
		int u,u2,bushu;
		cin>>gg>>s3;
		mon=(gg[4]-'0')*10+gg[5]-'0';
		day=(gg[6]-'0')*10+gg[7]-'0';
		scanf("%2d:%2d:%2d %2d:%2d:%2d %lf %d\'%d\" %d",&h,&m,&s,&h2,&m2,&s2,&l,&u,&u2,&bushu);
		int r=bianhao[s3];
		syx[r].push_back(node{mon,day,h,m,s,h2,m2,s2,l,v(u,u2),bushu});
	}
	for(int i=1;i<=N;++i){
		int l=syx[i].size();
		for(int j=0;j<l;++j){
			node c=syx[i][j];
			if(xingbie[i]&&c.l>=3.0||!xingbie[i]&&c.l>=1.5){
				double pingjun=c.l*1000.0/(c.h2*3600.0+c.m2*60+c.s2-c.h*3600-c.m*60-c.s);
				if(pingjun>=2.0&&pingjun<=5.0){
					if(c.zan<=v(4,30)&&c.l*1000/(c.bushu*1.0)<=1.5){
						if(last_time[i]!=0){
							if(Time(c.mon,c.day,c.h,c.m,c.s)-last_time[i]>=6*3600){
								last_time[i]=Time(c.mon,c.day,c.h2,c.m2,c.s2);
								hefa[i]++;
							}
						}
						else{
							last_time[i]=Time(c.mon,c.day,c.h2,c.m2,c.s2);
							hefa[i]++;
						}
					}
				}
			}
		}
	}
	for(int i=1;i<=N;++i){
		for(int j=1;;++j){
			if(hefa[i]<ygcp[j]){
				sc[i]+=j-1;break;
			}
		}
		int op=c2[i]+hefa[i];
		for(int j=1;;++j){
			if(op<chuqin[j]){
				sc[i]+=j-1;break;
			}
		}
	}
	for(int i=1;i<=N;++i){
		cout<<BH[i]<<" "<<sc[i]<<" ";
		if(sc[i]>=95){
			cout<<"A";
		}
		else if(sc[i]>=90)cout<<"A-";
		else if(sc[i]>=85)cout<<"B+";
		else if(sc[i]>=80)cout<<"B";
		else if(sc[i]>=77)cout<<"B-";
		else if(sc[i]>=73)cout<<"C+";
		else if(sc[i]>=70)cout<<"C";
		else if(sc[i]>=67)cout<<"C-";
		else if(sc[i]>=63)cout<<"D+";
		else if(sc[i]>=60)cout<<"D";
		else cout<<"F";
		putchar('\n');
	}
	return 0;
}
2023/4/29 20:51
加载中...