大模拟……
#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;
}