比赛 东方版NOIP模拟赛 评测结果 MMMMMMMMMM
题目名称 Yukari 最终得分 0
用户昵称 Skyo 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2015-10-28 20:33:46
显示代码纯文本
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;

int n, xl, xr, yl, yr, maxt, pos;
int ans[100000005];

int calc(int &tl, int &tr, int x, int y, int u, int v)
{
	int tl1, tr1, tl2, tr2; tl1 = tl2 = 1<<30, tr1 = tr2 = -(1<<30);
	if(x < xl)
	{
		if(u > 0)
		{
			tl1 = max(0, (xl-x)/u-2);
			while(x+u*tl1 < xl) tl1++;
			tr1 = (xr-x)/u+2;
			while(x+u*tr1 > xr) tr1--;
		}
	}
	else if(x > xr)
	{
		if(u < 0)
		{
			tl1 = max(0, (xr-x)/u-2);
			while(x+u*tl1 > xr) tl1++;
			tr1 = (xl-x)/u+2;
			while(x+u*tr1 < xl) tr1--;
		}
	}
	else 
	{
		tl1 = 0;	
		if(u > 0)
		{
			tr1 = (xr-x)/u+2;
			while(x+u*tr1 > xr) tr1--;
		}
		if(u < 0)
		{
			tr1 = (xl-x)/u+2;
			while(x+u*tr1 < xl) tr1--;
		}
	}
	if(y < yl)
	{
		if(v > 0)
		{
			tl2 = max(0, (yl-y)/v-2);
			while(y+v*tl2 < yl) tl2++;
			tr2 = (yr-y)/v+2;
			while(y+v*tr2 > yr) tr2--;
		}
	}
	else if(y > yr)
	{
		if(v < 0)
		{
			tl2 = max(0, (yr-y)/v-2);
			while(y+v*tl2 > yr) tl2++;
			tr2 = (yl-y)/v+2;
			while(y+v*tr2 < yl) tr2--;
		}
	}
	else 
	{
		tl2 = 0;	
		if(v > 0)
		{
			tr2 = (yr-y)/v+2;
			while(y+v*tr2 > yr) tr2--;
		}
		if(v < 0)
		{
			tr2 = (yl-y)/v+2;
			while(y+v*tr2 < yl) tr2--;
		}
	}
	tl = max(tl1, tl2);
	tr = min(tr1, tr2);
	if(tl > tr) tr = -1, tl = 0;
}

int main()
{
	freopen("camera.in", "r", stdin);
	freopen("camera.out", "w", stdout);
	scanf("%d %d %d %d %d", &n, &xl, &yl, &xr, &yr);
	for(int i = 1; i <= n; i++)
	{
		int tl = 0, tr = 0, x, y, u, v; 
		scanf("%d %d %d %d", &x, &y, &u, &v);
		calc(tl, tr, x, y, u, v);
		ans[tl]++, ans[tr+1]--;
		maxt = max(maxt, tr);
	}
	for(int i = 1; i <= maxt; i++) ans[i] += ans[i-1];
	for(int i = 1; i <= maxt; i++)
		if(ans[i] > ans[pos]) pos = i;
	printf("%d", pos);
	return 0;
}