样例过,提交WA求Hack数据(测试点下载不了)
查看原帖
样例过,提交WA求Hack数据(测试点下载不了)
923273
WAis_WonderfulAnswer楼主2023/12/10 20:00
#include<bits/stdc++.h>
using namespace std;
struct stu
{
    string id,lrun;
    char op,tzcs;
    int zhx,qmjc,bjxly,ygcp;
}mark[10010];
struct rn
{
    string date,id,bg,nd,stop;
    double l;
    int step;
}runn[150000];
struct cj
{
    string id,dj;
    int a,b,c,d,e;
}chj[10010];
int n,m,day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
map<string,int>mp;
map<int,int>vis;
map<int,pair<string,string> >last;
bool cmp(int mt1,int sd1,int mt2,int sd2)
{
	int tm1=mt1*60+sd1,tm2=mt2*60+sd2;
	return tm1<=tm2;
}
bool date_cmp(int lmon,int lday,int ltm,int nmon,int nday,int ntm)
{
	if (lmon!=nmon) return lmon<=nmon;
	if (lday!=nday) return lday<=nday;
	return ltm<=ntm;
}
bool check(int id)
{
	if (mark[mp[runn[id].id]].op=='M') if (runn[id].l<3000.0) return false;
	if (mark[mp[runn[id].id]].op=='F') if (runn[id].l<1500.0) return false;
	string ll=runn[id].bg,rr=runn[id].nd;
	int lt=((ll[0]-'0')*10+(ll[1]-'0'))*3600+((ll[3]-'0')*10+(ll[4]-'0'))*60+((ll[6]-'0')*10+(ll[7]-'0'));
	int rt=((rr[0]-'0')*10+(rr[1]-'0'))*3600+((rr[3]-'0')*10+(rr[4]-'0'))*60+((rr[6]-'0')*10+(rr[7]-'0'));
	double sm1=runn[id].l/((double)rt-(double)lt);
	if (sm1<2.0||sm1>5.0) return false;
	string stp=runn[id].stop;
	int mt=0,sd=0;
	int fg=0;
	for (int i=0;i<(int)stp.size();i++)
	{
		if (!(stp[i]>='0'&&stp[i]<='9'))
		{
			fg++;
			continue;
		}
		if (!fg) mt=mt*10+(stp[i]-'0');
		if (fg==1) sd=sd*10+(stp[i]-'0');
	}
	if (!cmp(mt,sd,4,30)) return false;
	double sm2=runn[id].l/(double)runn[id].step;
	if (sm2>1.5) return false;
	string last_date=last[mp[runn[id].id]].first;
	string last_tm=last[mp[runn[id].id]].second;
	int last_tim=((last_tm[0]-'0')*10+(last_tm[1]-'0'))*3600+((last_tm[3]-'0')*10+(last_tm[4]-'0')*60+((last_tm[6]-'0')*10+(last_tm[7]-'0')));
	last_tim+=(6*60*60);
	int lmon,lday;
	if (last_tim>=24*60*60)
	{
		lmon=(last_date[4]-'0')*10+(last_date[5]-'0');
		lday=(last_date[6]-'0')*10+(last_date[7]-'0');
		if (lday==day[lmon])
		{
			if (lmon==12) lmon=1;
			else lmon++;
			lday=1;
		}
		else lday++;
		last_tim-=(6*60*60);
	}
	string nwdate=runn[id].date;
	int nmon=(nwdate[4]-'0')*10+(nwdate[5]-'0'),nday=(nwdate[6]-'0')*10+(nwdate[7]-'0');
	if (!date_cmp(lmon,lday,last_tim,nmon,nday,lt)) return false;
	return true;
}
void calc1(int id)
{
	string tm=mark[id].lrun;
	int mt=0,sd=0;
	int fg=0;
	for (int i=0;i<(int)tm.size();i++)
	{
		if (!(tm[i]>='0'&&tm[i]<='9'))
		{
			fg++;
			continue;
		}
		if (!fg) mt=mt*10+(tm[i]-'0');
		if (fg==1) sd=sd*10+(tm[i]-'0');
	}
	if (mark[id].op=='M')
	{
		if (cmp(mt,sd,12,30)) chj[id].b=20;
		else if (cmp(mt,sd,13,0)) chj[id].b=18;
		else if (cmp(mt,sd,13,30)) chj[id].b=16;
		else if (cmp(mt,sd,14,0)) chj[id].b=14;
		else if (cmp(mt,sd,14,30)) chj[id].b=12;
		else if (cmp(mt,sd,15,10)) chj[id].b=10;
		else if (cmp(mt,sd,15,50)) chj[id].b=8;
		else if (cmp(mt,sd,16,30)) chj[id].b=6;
		else if (cmp(mt,sd,17,10)) chj[id].b=4;
		else if (cmp(mt,sd,18,0)) chj[id].b=2;
	}
	else
	{
		if (cmp(mt,sd,6,40)) chj[id].b=20;
		else if (cmp(mt,sd,6,57)) chj[id].b=18;
		else if (cmp(mt,sd,7,14)) chj[id].b=16;
		else if (cmp(mt,sd,7,31)) chj[id].b=14;
		else if (cmp(mt,sd,7,50)) chj[id].b=12;
		else if (cmp(mt,sd,8,5)) chj[id].b=10;
		else if (cmp(mt,sd,8,20)) chj[id].b=8;
		else if (cmp(mt,sd,8,35)) chj[id].b=6;
		else if (cmp(mt,sd,8,50)) chj[id].b=4;
		else if (cmp(mt,sd,9,0)) chj[id].b=2;
	}
}
void calc2(int id)
{
	if (mark[id].ygcp>=21) chj[id].c=10;
	else if (mark[id].ygcp>=19) chj[id].c=9;
	else if (mark[id].ygcp>=17) chj[id].c=8;
	else if (mark[id].ygcp>=14) chj[id].c=7;
	else if (mark[id].ygcp>=11) chj[id].c=6;
	else if (mark[id].ygcp>=7) chj[id].c=4;
	else if (mark[id].ygcp>=3) chj[id].c=2;
}
void calc3(int id)
{
	int sm=mark[id].bjxly+mark[id].ygcp;
	if (sm>=18) chj[id].e+=5;
	else if (sm>=15) chj[id].e+=4;
	else if (sm>=12) chj[id].e+=3;
	else if (sm>=9) chj[id].e+=2;
	else if (sm>=6) chj[id].e+=1;
}
void calc4(int id)
{
	int sm=chj[id].a+chj[id].b+chj[id].c+chj[id].d+chj[id].e;
	chj[id].dj="";
	if (sm>=95) chj[id].dj+='A';
	else if (sm>=90) chj[id].dj+="A-";
	else if (sm>=85) chj[id].dj+="B+";
	else if (sm>=80) chj[id].dj+='B';
	else if (sm>=77) chj[id].dj+="B-";
	else if (sm>=73) chj[id].dj+="C+";
	else if (sm>=70) chj[id].dj+='C';
	else if (sm>=67) chj[id].dj+="C-";
	else if (sm>=63) chj[id].dj+="D+";
	else if (sm>=60) chj[id].dj+='D';
	else chj[id].dj+='F';
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin>>n;
    for (int i=0;i<n;i++)
    {
    	cin>>mark[i].id>>mark[i].op>>mark[i].zhx>>mark[i].lrun>>mark[i].tzcs>>mark[i].qmjc>>mark[i].bjxly;
    	mp[mark[i].id]=i;
	}
    cin>>m;
    for (int i=0;i<m;i++) cin>>runn[i].date>>runn[i].id>>runn[i].bg>>runn[i].nd>>runn[i].l>>runn[i].stop>>runn[i].step;
    for (int i=0;i<m;i++)
    {
    	if (check(i))
    	{
    		mark[mp[runn[i].id]].ygcp++;
    		vis[mp[runn[i].id]]=1;
    		last[mp[runn[i].id]]=make_pair(runn[i].date,runn[i].nd);
		}
	}
	for (int i=0;i<n;i++)
    {
        chj[i].id="";
        chj[i].id+=mark[i].id;
        chj[i].a=mark[i].zhx;
        calc1(i);
        calc2(i);
        if (mark[i].tzcs=='P') chj[i].d=10;
        else chj[i].d=0;
        chj[i].e+=mark[i].qmjc;
        calc3(i);
        calc4(i);
        cout<<chj[i].id<<" "<<chj[i].a+chj[i].b+chj[i].c+chj[i].d+chj[i].e<<" "<<chj[i].dj<<'\n';
    }
    return 0;
}
2023/12/10 20:00
加载中...