比赛 东方版NOIP模拟赛 评测结果 AAWTTTTTTA
题目名称 Yukari 最终得分 30
用户昵称 Neptune 运行时间 6.005 s
代码语言 C++ 内存使用 2.20 MiB
提交时间 2015-10-28 21:14:03
显示代码纯文本
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node {int x,s;};
int comp(node a,node b){return a.x<b.x;} 
node fll[200100];
int n,l,r,u,d,now=1;
int mark[100010];
int l1,l2,v1,v2,aim1,aim2,t,tmp;
int check1(int x,int y,int vx,int vy)
{
    if(x<l&&vx<=0)return 0;
    if(x>r&&vx>=0)return 0;
    if(y<d&&vy<=0)return 0;
    if(y>u&&vy>=0)return 0;
    return 1;
}
int check2(int x,int y)
{
    if(x>=l&&x<=r&&y<=u&&y>=d)return 1;
    return 0;
}
int check(int x,int y,int vx,int vy)
{
    if(!check1(x,y,vx,vy))return 0;
    t=0;
    aim1=-1;
	aim2=-1;
	tmp=0;
    for(;;)
	{
	    if(!check1(x+vx*(t-2),y+vy*(t-2),vx,vy))return 0;
	    if(check2(x+vx*t,y+vy*t))
		{
			if(tmp==0)aim1=t;
			tmp=1;
		}
		else if(tmp==1)
		{
		    aim2=t-1;
		    return 1;
		}
		t++;
	}
}
int main()
{
   freopen("camera.in","r",stdin);
   freopen("camera.out","w",stdout);
   scanf("%d %d %d %d %d",&n,&l,&d,&r,&u);
   for(int i=1;i<=n;i++)
   {
      scanf("%d %d %d %d",&l1,&l2,&v1,&v2);
      if(check(l1,l2,v1,v2))
	  {
	     fll[now].x=aim1;
	     fll[now+1].x=aim2;
	     fll[now].s=fll[now+1].s=i;
	     now=now+2;
	  }
	  else 
	  {
	     n--;
	     i--;
	  }
   }
   int ans,tmp=0,zuida=-1,biao=0;
   sort(fll+1,fll+now,comp);
   for(int i=1;i<now;i++)
   {
   	  if(biao)
   	  {
         tmp--;
		 biao=0;		 
	  }
      if(!mark[fll[i].s])
	  {
	     mark[fll[i].s]=1;
	     tmp++;
	  }
	  else 
	  {
	     mark[fll[i].s]=0;
	     biao=1;
	  }
	  if(zuida<tmp)
	  {
	     zuida=tmp;
	     ans=fll[i].x;
	  }
   }
   printf("%d",ans);
}