悬关求调,WA加RE
查看原帖
悬关求调,WA加RE
690160
ask_silently楼主2023/8/5 17:34

写了好久,写完样例过了,提交上去又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;
}

2023/8/5 17:34
加载中...