讨论区hack已过
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+7;
struct node{
string p;
char xi;
int sum,c,yang;
}a[N];//每个学生的状态
map<string,int> ma;
int long_run(int id,string li){
double x=0,y=0,i;
int cnt=0;
for(i=0;li[i]>='0'&&li[i]<='9';i++) x=x*10+li[i]-'0';
for(i=i+1;li[i]>='0'&&li[i]<='9';i++,cnt++) y=y*10+li[i]-'0';
y=y/pow(10,cnt);
x+=y;
if(a[id].xi=='M'){
if(x<=12.30) return 20;
else if(x<=13) return 18;
else if(x<=13.3) return 16;
else if(x<=14) return 14;
else if(x<=14.3) return 12;
else if(x<=15.1) return 10;
else if(x<=15.5) return 8;
else if(x<=16.3) return 6;
else if(x<=17.1) return 4;
else if(x<=18) return 2;
}
else{
if(x<=6.4) return 20;
else if(x<=6.57) return 18;
else if(x<=7.14) return 16;
else if(x<=7.31) return 14;
else if(x<=7.50) return 12;
else if(x<=8.05) return 10;
else if(x<=8.20) return 8;
else if(x<=8.35) return 6;
else if(x<=8.50) return 4;
else if(x<=9) return 2;
}
}
struct node2{
string p;
int bx,by,bz;
int yu,ri;
}b[N];
string day;
string p2;
string timb,timn;
double ln;string x;double s;
int r[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
void check(int id){
ln*=1000;
if(a[id].xi=='M') {
if(ln<3000) return;
}
else
if(ln<1500) return;
int tx=0,ty=0,i;
for(i=0;x[i]>='0'&&x[i]<='9';i++) tx=tx*10+x[i]-'0';
for(i=i+1;x[i]>='0'&&x[i]<='9';i++) ty=ty*10+x[i]-'0';
tx=tx*60+ty;
if(tx>270) return;
int tz;
tx=ty=tz=0;
int fx=0,fy=0,fz=0;
for(i=0;timb[i]>='0'&&timb[i]<='9';i++) fx=fx*10+timb[i]-'0';
for(i=i+1;timb[i]>='0'&&timb[i]<='9';i++) fy=fy*10+timb[i]-'0';
for(i=i+1;timb[i]>='0'&&timb[i]<='9'&&i<timb.size();i++) fz=fz*10+timb[i]-'0';
for(i=0;timn[i]>='0'&&timn[i]<='9';i++) tx=tx*10+timn[i]-'0';
for(i=i+1;timn[i]>='0'&&timn[i]<='9';i++) ty=ty*10+timn[i]-'0';
for(i=i+1;timn[i]>='0'&&timn[i]<='9'&&i<timn.size();i++) tz=tz*10+timn[i]-'0';
double sum=(tx-fx)*3600+(ty-fy)*60+(tz-fz);
if((ln/s)>1.5) return;
if((ln/sum)<2||(ln/sum)>5) return;
int yu=0,ri=0;
for(int i=4;i<=5;i++) yu=yu*10+day[i]-'0';
for(int i=6;i<=7;i++) ri=ri*10+day[i]-'0';
if((yu==b[id].yu&&ri-b[id].ri<=1)||(r[b[id].yu]==b[id].ri&&ri==1&&yu-b[id].yu==1)){
sum=0;
if(ri==b[id].ri)
sum=(fx-b[id].bx)*3600+(fy-b[id].by)*60+(fz-b[id].bz);
else sum=(fx-b[id].bx)*3600+(fy-b[id].by)*60+(fz-b[id].bz)+86400;
if(sum<6*60*60) return;
}
b[id].yu=yu,b[id].ri=ri,b[id].bx=tx,b[id].by=ty,b[id].bz=tz;
a[id].yang++;
}
void Run(int id){
if(a[id].yang>=21) a[id].sum+=10;
else if(a[id].yang>=19) a[id].sum+=9;
else if(a[id].yang>=17) a[id].sum+=8;
else if(a[id].yang>=14) a[id].sum+=7;
else if(a[id].yang>=11) a[id].sum+=6;
else if(a[id].yang>=7) a[id].sum+=4;
else if(a[id].yang>=3) a[id].sum+=2;
a[id].c+=a[id].yang;
if(a[id].c>=18) a[id].sum+=5;
else if(a[id].c>=15) a[id].sum+=4;
else if(a[id].c>=12) a[id].sum+=3;
else if(a[id].c>=9) a[id].sum+=2;
else if(a[id].c>=6) a[id].sum+=1;
}
void Out(int id){
if(a[id].sum>=95) cout<<"A\n";
else if(a[id].sum>=90) cout<<"A-\n";
else if(a[id].sum>=85) cout<<"B+\n";
else if(a[id].sum>=80) cout<<"B\n";
else if(a[id].sum>=77) cout<<"B-\n";
else if(a[id].sum>=73) cout<<"C+\n";
else if(a[id].sum>=70) cout<<"C\n";
else if(a[id].sum>=67) cout<<"C-\n";
else if(a[id].sum>=63) cout<<"D+\n";
else if(a[id].sum>=60) cout<<"D\n";
else cout<<"F\n";
}
bool cmp(node g,node h){
return g.p<h.p;
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int n,m;
cin>>n;
for(int i=1;i<=n;i++){
int lin;
cin>>a[i].p>>a[i].xi>>a[i].sum;
string li;
cin>>li;
a[i].sum+=long_run(i,li);
cin>>li;
if(li=="P") a[i].sum+=10;
cin>>lin;
a[i].sum+=lin;
cin>>a[i].c;
ma[a[i].p]=i;
}
cin>>m;
for(int i=1;i<=m;i++){
cin>>day>>p2>>timb>>timn>>ln>>x>>s;
check(ma[p2]);
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
Run(i);
cout<<a[i].p<<' '<<a[i].sum<<' ';
Out(i);
}
return 0;
}