比赛 |
东方版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;
}