比赛 东方版NOIP模拟赛 评测结果 AAAAAAAAAA
题目名称 Yukari 最终得分 100
用户昵称 mikumikumi 运行时间 0.340 s
代码语言 C++ 内存使用 5.27 MiB
提交时间 2015-10-28 21:31:21
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int SIZEN=100010,INF=0x7fffffff/2;
int N;
int xl,yl,xr,yr;
int in[SIZEN],out[SIZEN];
int X[SIZEN],Y[SIZEN];
int U[SIZEN],V[SIZEN];
void read()
{
	scanf("%d",&N);
	scanf("%d%d%d%d",&xl,&yl,&xr,&yr);
	for(int i=1;i<=N;i++) scanf("%d%d%d%d",&X[i],&Y[i],&U[i],&V[i]);
}
int update(int x,int y,int c)//x/y向下取证
{
	if(x==0) return 0;
	if(y==0) return INF;
	if(!c) return x/y;
	else return (x-1)/y+1;
}
bool pan(int i)
{
	if(X[i]>=xl&&Y[i]>=yl&&X[i]<=xr&&Y[i]<=yr) return 1;
	return 0;
}
void set()
{
	int tl,pl,tr,pr;//穿过这四条边的时间,tl,tr是横
	for(int i=1;i<=N;i++)
	{
		tl=(xl-X[i]);
		tr=(xr-X[i]);
		pl=(yl-Y[i]);
		pr=(yr-Y[i]);
		//cout<<tl<<" "<<tr<<" "<<pl<<" "<<pr<<endl;
		tl=update(tl,U[i],1);
		tr=update(tr,U[i],0);
		pl=update(pl,V[i],1);
		pr=update(pr,V[i],0);
		if(tl>tr)swap(tl,tr);
		if(pl>pr)swap(pl,pr);
		if(tl<0)tl=0;
		if(pl<0)pl=0;
		in[i]=max(tl,pl);
		out[i]=min(tr,pr);
	}
}
class miku
{
public:
	int x;
	int id;
	bool pos;
}E[2*SIZEN];
bool cmp(miku a,miku b)
{
	return a.x<b.x;
}
int L[SIZEN]={0};
void work()
{
	int tot=0;
	for(int i=1;i<=N;i++)
	{
		if(in[i]>out[i]) continue;
		E[++tot].x=in[i];
		E[tot].pos=1;
		E[++tot].x=out[i];
		E[tot].pos=0;
	}
	sort(E+1,E+tot+1,cmp);
	int cnt=0;
	int tim[SIZEN]={0};
	for(int i=1;i<=tot;i++)
	{
		if(E[i].x!=E[i-1].x)
		{
			cnt++;
			tim[cnt]=E[i].x;
		}
		if(E[i].pos==1) L[cnt]++;
		else L[cnt+1]--;
	}
	/*for(int i=1;i<=cnt+1;i++)
		cout<<tim[i]<<" ";
	cout<<endl;
	for(int i=1;i<=cnt+1;i++)
		cout<<L[i]<<" ";
	cout<<endl;*/
	int ma=L[0];
	int now=ma;
	int ans=0;
	for(int i=1;i<=cnt;i++)
	{
		now+=L[i];
		if(now>ma) 
		{
			ma=now;
			ans=i;
		}
	}
	printf("%d",tim[ans]);
}
int main()
{
	freopen("camera.in","r",stdin);
	freopen("camera.out","w",stdout);
	read();
	set();
	//for(int i=1;i<=N;i++)
	//	cout<<in[i]<<" "<<out[i]<<endl;
	work();
	return 0;
}