写了好久,写完样例过了,提交上去又WA又RE
#include <bits/stdc++.h>
using namespace std;
int n,m;
int propao[10010],yueri[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
struct node{
string p,mopao,dengji; //学号,期末长跑成绩
char gender,tc; //性别,体质测试
int PEscore,bigonescore,xun,pao,score; //体育专项成绩,大一期末检测成绩,班级训练营次数,阳光长跑次数
}a[10010];
struct node1{
string ri,p,st,ed,ting; //日期,学号,开始时间,结束时间,暂停时间
double meter; //距离(千米)
int bu,pd,stshi,stfen,stmiao,edshi,edfen,edmiao; //步数,是否合法
}pao[150010];
bool cmp(node x,node y){
return x.p<y.p;
}
bool cmp1(node1 x,node1 y){
return x.p<y.p;
}
void qmcp(int x){
int fen=0,miao=0,flag=1;
for(int i=0;i<a[x].mopao.size();i++){
if(a[x].mopao[i]=='\''){
flag=2;
continue;
}
if(a[x].mopao[i]=='"') break;
if(flag==1) fen=fen*10+(a[x].mopao[i]-'0');
else miao=miao*10+(a[x].mopao[i]-'0');
}
if(a[x].gender=='M'){
if(fen>18||(fen==18&&miao>0)) a[x].score+=0;
else if((fen==17&&miao>10)||fen>17) a[x].score+=2;
else if((fen==16&&miao>30)||fen>16) a[x].score+=4;
else if((fen==15&&miao>50)||fen>15) a[x].score+=6;
else if((fen==15&&miao>10)||fen>15) a[x].score+=8;
else if((fen==14&&miao>30)||fen>14) a[x].score+=10;
else if((fen==14&&miao>0)||fen>14) a[x].score+=12;
else if((fen==13&&miao>30)||fen>13) a[x].score+=14;
else if((fen==13&&miao>0)||fen>13) a[x].score+=16;
else if((fen==12&&miao>30)||fen>12) a[x].score+=18;
else a[x].score+=20;
}else{
if(fen>9||(fen==9&&miao>0)) a[x].score+=0;
else if((fen==8&&miao>50)||fen>8) a[x].score+=2;
else if((fen==8&&miao>35)||fen>8) a[x].score+=4;
else if((fen==8&&miao>20)||fen>8) a[x].score+=6;
else if((fen==8&&miao>5)||fen>8) a[x].score+=8;
else if((fen==7&&miao>50)||fen>7) a[x].score+=10;
else if((fen==7&&miao>31)||fen>7) a[x].score+=12;
else if((fen==7&&miao>14)||fen>7) a[x].score+=14;
else if((fen==6&&miao>57)||fen>6) a[x].score+=16;
else if((fen==6&&miao>40)||fen>6) a[x].score+=18;
else a[x].score+=20;
}
}
void ygcp(int x){
int stshi=0,stfen=0,stmiao=0,flag=1;
for(int i=0;i<pao[x].st.size();i++){
if(pao[x].st[i]==':'){
flag++;
continue;
}
if(flag==1) stshi=stshi*10+(pao[x].st[i]-'0');
else if(flag==2) stfen=stfen*10+(pao[x].st[i]-'0');
else stmiao=stmiao*10+(pao[x].st[i]-'0');
}
int edshi=0,edfen=0,edmiao=0,flag1=1;
for(int i=0;i<pao[x].ed.size();i++){
if(pao[x].ed[i]==':'){
flag1++;
continue;
}
if(flag1==1) edshi=edshi*10+(pao[x].ed[i]-'0');
else if(flag1==2) edfen=edfen*10+(pao[x].ed[i]-'0');
else edmiao=edmiao*10+(pao[x].ed[i]-'0');
}
int tfen=0,tmiao=0,flag3=1;
for(int i=0;i<pao[x].ting.size();i++){
if(pao[x].ting[i]=='\''){
flag3=2;
continue;
}
if(pao[x].ting[i]=='"') break;
if(flag3==1) tfen=tfen*10+(pao[x].ting[i]-'0');
else tmiao=tmiao*10+(pao[x].ting[i]-'0');
}
pao[x].stshi=stshi,pao[x].stfen=stfen,pao[x].stmiao=stmiao,pao[x].edshi=edshi,pao[x].edfen=edfen,pao[x].edmiao=edmiao;
int z=(edshi-stshi)*3600+(edfen-stfen)*60+(edmiao-stmiao);
tmiao+=tfen*60;
pao[x].meter*=1000;
if(pao[x].meter/z<2||pao[x].meter/z>5) return;
if(pao[x].meter/pao[x].bu>1.5) return;
if(tmiao>270) return;
pao[x].pd=1;
}
bool rq(int x,int y){
int f=(pao[y].stshi-pao[x].edshi)*3600+(pao[y].stfen-pao[x].edfen)*60+(pao[y].stmiao-pao[x].stmiao);
if(f>=6*3600) return true;
int styue=(pao[x].ri[4]-'0')*10+(pao[x].ri[5]-'0'),stri=(pao[x].ri[6]-'0')*10+(pao[x].ri[7]-'0');
int edyue=(pao[y].ri[4]-'0')*10+(pao[y].ri[5]-'0'),edri=(pao[y].ri[6]-'0')*10+(pao[y].ri[7]-'0');
if(styue==edyue&&stri==edri) return false;
f+=((edri-stri)*86400);
if(f>=6*3600) return true;
if(styue==edyue) return false;
f+=((edyue-styue)*86400*yueri[styue]);
if(f>=6*3600) return true;
}
void hb(int x,int y){
if(!pao[x].pd) return;
if(a[y].gender=='M'){
if(pao[x].meter<3000) return;
}else{
if(pao[x].meter<1500) return;
}
if(!propao[y]) propao[y]=x;
else{
if(!rq(propao[y],x)) return;
else propao[y]=x;
}
a[y].pao++;
}
void paopd(int x){
if(a[x].pao<3) a[x].score+=0;
else if(a[x].pao<=6) a[x].score+=2;
else if(a[x].pao<=10) a[x].score+=4;
else if(a[x].pao<=13) a[x].score+=6;
else if(a[x].pao<=16) a[x].score+=7;
else if(a[x].pao<=18) a[x].score+=8;
else if(a[x].pao<=20) a[x].score+=9;
else a[x].score+=10;
}
void chupd(int x){
if((a[x].xun+a[x].pao)<6) a[x].score+=0;
else if((a[x].xun+a[x].pao)<=8) a[x].score+=1;
else if((a[x].xun+a[x].pao)<=11) a[x].score+=2;
else if((a[x].xun+a[x].pao)<=14) a[x].score+=3;
else if((a[x].xun+a[x].pao)<=17) a[x].score+=4;
else a[x].score+=5;
}
void jipd(int x){
if(a[x].score<60) a[x].dengji="F";
else if(a[x].score<63) a[x].dengji="D";
else if(a[x].score<67) a[x].dengji="D+";
else if(a[x].score<70) a[x].dengji="C-";
else if(a[x].score<73) a[x].dengji="C";
else if(a[x].score<77) a[x].dengji="C+";
else if(a[x].score<80) a[x].dengji="B-";
else if(a[x].score<85) a[x].dengji="B";
else if(a[x].score<90) a[x].dengji="B+";
else if(a[x].score<95) a[x].dengji="A-";
else a[x].dengji="A";
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
cin>>a[i].p>>a[i].gender>>a[i].PEscore>>a[i].mopao>>a[i].tc>>a[i].bigonescore>>a[i].xun;
a[i].score+=a[i].PEscore;
if(a[i].tc=='P') a[i].score+=10;
a[i].score+=a[i].bigonescore;
qmcp(i);
}
scanf("%d",&m);
for(int i=1;i<=m;i++){
cin>>pao[i].ri>>pao[i].p>>pao[i].st>>pao[i].ed>>pao[i].meter>>pao[i].ting>>pao[i].bu;
ygcp(i);
}
sort(a+1,a+1+n,cmp);
sort(pao+1,pao+1+m,cmp1);
int pro=1;
for(int i=1;i<=m;i++){
for(int j=pro;j<=n;j++){
if(pao[i].p==a[j].p){
hb(i,j);
pro=j;
break;
}
}
}
for(int i=1;i<=n;i++){paopd(i);chupd(i);jipd(i);}
for(int i=1;i<=n;i++){
for(int j=0;j<a[i].p.size();j++) cout<<a[i].p[j];
cout<<" "<<a[i].score<<" ";
for(int j=0;j<a[i].dengji.size();j++) cout<<a[i].dengji[j];
cout<<endl;
}
return 0;
}