大模拟求调
查看原帖
大模拟求调
499627
arc_suvr楼主2021/10/1 13:42
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node 
{
	int number,sexual,yg,sum2;
	int score;
}a[10005];
bool cmp(node a,node b)
{
	return a.number<b.number;
}
int girl_score(int a)
{
	if(a<=340)
		return 20;
	if(a<=357)
		return 18;
	if(a<=434)
		return 16;
	if(a<=451)
		return 14;
	if(a<=470)
		return 12;
	if(a<=485)
		return 10;
	if(a<=500)
		return 8;
	if(a<=515)
		return 6;
	if(a<=530)
		return 4;
	if(a<=540)
		return 2;
	return 0;
}
int boy_score(int a)
{
	if(a<=750)
		return 20;
	if(a<=780)
		return 18;
	if(a<=810)
		return 16;
	if(a<=840)
		return 14;
	if(a<=870)
		return 12;
	if(a<=910)
		return 10;
	if(a<=950)
		return 8;
	if(a<=990)
		return 6;
	if(a<=1030)
		return 4;
	if(a<=1080)
		return 2;
	return 0;	
}
int get_score_r(int a,int m)
{
	return m==0?boy_score(a):girl_score(a);
}
int get_time(int h1,int h2,int m1,int m2,int s1,int s2)
{
	return abs((h2-h1)*60*60+(m2-m1)*60+(s2-s1));
}
int get_num(int num)
{
	for(int i=1;i<=n;i++)
	{
		if(a[i].number==num)
			return i;
	}
}
int sunshine_score(int a)
{
	if(a>=21)
		return 10;
	if(a>=19&&a<=20)
		return 9;
	if(a>=17&&a<=18)
		return 8;
	if(a>=14&&a<=16)
		return 7;
	if(a>=11&&a<=13)
		return 6;
	if(a>=7&&a<=10)
		return 4;
	if(a>=3&&a<=6)
		return 2;
	return 0;
}
void init()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		char bg,ok,tmp;
		int minutes,seconds,sc;
		cin>>a[i].number>>bg>>a[i].score>>minutes>>tmp>>seconds>>tmp>>ok>>sc>>a[i].sum2;
		a[i].sexual=(bg=='M')?0:1;
		a[i].score+=(ok=='P')?10:0+sc;
		a[i].score+=get_score_r(60*minutes+seconds,a[i].sexual);
	}	
	sort(a+1,a+n+1,cmp);
	/*
	for(int i=1;i<=n;i++)
	{
		cout<<a[i].number<<" "<<a[i].score<<endl;	
	}
	*/
}
int last_score(int x)
{
	if(x>=18)
		return 5;
	if(x>=15&&x<=17)
		return 4;
	if(x>=12&&x<=14)
		return 3;
	if(x>=9&&x<=11)
		return 2;
	if(x>=6&&x<=8)
		return 1;
	return 0;
}
int grade(int score)
{
	if(score<=100&&score>=95)
		return 0;
	if(score<95&&score>=90)
		return 1;
	if(score<90&&score>=85)
		return 2;
	if(score<85&&score>=80)
		return 3;
	if(score<80&&score>=77)
		return 4;
	if(score<77&&score>=73)
		return 5;
	if(score<73&&score>=70)
		return 6;
	if(score<70&&score>=67)
		return 7;
	if(score<67&&score>=63)
		return 8;
	if(score<63&&score>=60)
		return 9;
	if(score<60)
		return 10;
}
bool check(int xb,int meter,double v,int se,int bf)
{
	if(xb==0)
	{
		if(meter<3000)
			return false;
	}
	if(xb==1)
	{
		if(meter<1500)
			return false;
	}
	if(v<2.00||v>5.00)
		return false;
	if(se>270)
		return false;
	return true;
}
void solve1()
{
	cin>>m;
	int lastd=0,lasth=0,lastm=0,lasts=0;
	for(int i=1;i<=m;i++)
	{
		bool flag=true;
		int date,num,h1,h2,m1,m2,s1,s2,meters,fo,r1,r2;
		double kmeters,bp,v;
		char tmp;
		cin>>date>>num>>h1>>tmp>>m1>>tmp>>s1;
		cin>>h2>>tmp>>m2>>tmp>>s2>>kmeters>>r1>>tmp>>r2>>tmp>>fo;
		meters=int(1000*kmeters),bp=1.00*meters/fo;
		int pos=get_num(num),time=get_time(h1,h2,m1,m2,s1,s2);
		v=1.00*meters/time*1.00;
		//meters 米 bp 步频 pos 点 time 时间 v 速度 
		//cout<<pos<<endl<<bp<<endl<<time<<endl<<v<<endl;
		if(i!=1)
		{
			if(date-lastd<2)
			{
				if(date-lastd==1)
				{
					lastd+=1,lasth-=24;
				}	
				int cha=get_time(lasth,h1,lastm,m1,lasts,s1);
				if(cha<6*60*60)
					flag=false;
				lastd-=1,lasth+=24;
				//cout<<cha<<endl;
			} 
		}
		if(flag==true)
			flag=check(a[pos].sexual,meters,v,r1*60+r2,bp);
		if(flag==true)
			lastd=date,lasth=h2,lastm=m2,lasts=s2,a[pos].yg++;
	}
}
void solve2()
{
	for(int i=1;i<=n;i++)
	{
		a[i].score+=sunshine_score(a[i].yg),a[i].score+=last_score(a[i].yg+a[i].sum2);
		cout<<a[i].number<<" "<<a[i].score<<" ";
		int grades=grade(a[i].score);
		if(grades==0)
			cout<<"A"<<endl;
		if(grades==1)
			cout<<"A-"<<endl;
		if(grades==2)
			cout<<"B+"<<endl;
		if(grades==3)
			cout<<"B"<<endl;
		if(grades==4)
			cout<<"B-"<<endl;
		if(grades==5)
			cout<<"C+"<<endl;
		if(grades==6)
			cout<<"C"<<endl;
		if(grades==7)
			cout<<"C-"<<endl;
		if(grades==8)
			cout<<"D+"<<endl;
		if(grades==9)
			cout<<"D"<<endl;
		if(grades==10)
			cout<<"F"<<endl;
	}
}
void work()
{
	init();
	solve1();
	solve2();
}
int main()
{
//	cout<<get_time(0,24,0,0,0,0);
	work();
	return 0;
}
2021/10/1 13:42
加载中...