hack.in:

20
E 17 29
E 30 12
N 29 2
E 8 19
N 43 6
N 23 21
N 34 37
E 24 15
E 13 26
N 20 46
N 5 25
E 27 36
N 32 45
E 14 43
E 37 8
E 28 38
E 3 1
E 49 32
E 26 18
N 36 44

wrong.out(括号内为正确结果):

26
13
41 (13)
35
30
22 (8)
Infinity
19
30 (10)
Infinity
Infinity
Infinity
Infinity
20
6
6
Infinity
Infinity
17
Infinity

#include <bits/stdc++.h>

int n, x, y, nn, en, NN[55], EE[55];

char c;

std::pair<int, int> N[55], E[55], P[55];

signed main()
{
	std::freopen("gold.in", "r", stdin);
	std::freopen("gold.out", "w", stdout);
	scanf("%d", &n);
	for (int i = 0; i < n; i++)
	{
		getchar();
		c = getchar();
		scanf("%d %d", &x, &y);
		if (c == 'N')
		{
			N[nn++] = {x, y};
		}
		else
		{
			E[en++] = {y, x};
		}
		P[i] = {x, y};
	}
	std::sort(N, N + nn);
	std::sort(E, E + en);
	for (int i = 0; i < nn; i++)
	{
		//printf("%d %d:\n", N[i].first, N[i].second);
		for (int j = 0; j < en; j++)
		{
			//printf("	%d %d\n", E[j].second, E[j].first);
			//printf("		%d %d\n", E[j].first - N[i].second, N[i].first - E[j].second);
			if ((N[i].first - E[j].second > E[j].first - N[i].second) && (E[j].first - N[i].second > 0) && ((E[NN[i] - 1].first > E[j].first) || !(NN[i])))
			{
				EE[j] = i + 1;
			}
			else if ((N[i].first - E[j].second < E[j].first - N[i].second) && (N[i].first - E[j].second > 0) && ((N[EE[j] - 1].first > N[i].first) || !(EE[j])))
			{
				NN[i] = j + 1;
			}
			//printf("		%d %d\n", EE[j] - 1, NN[i] - 1);
		}
	}
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < nn; j++)
		{
			if (N[j].first == P[i].first)
			{
				if (NN[j])
				{
					printf("%d\n", E[NN[j] - 1].first - N[j].second);
					//printf("	%d %d\n", E[NN[j] - 1].second, E[NN[j] - 1].first);
				}
				else
				{
					printf("Infinity\n");
				}
				//printf("%d %d\n", N[j].first, N[j].second);
				//printf("	%d %d\n", E[NN[j] - 1].second, E[NN[j] - 1].first);
			}
		}
		for (int j = 0; j < en; j++)
		{
			if (E[j].second == P[i].first)
			{
				if (EE[j])
				{
					printf("%d\n", N[EE[j] - 1].first - E[j].second);
					//printf("	%d %d\n", N[EE[j] - 1].first, N[EE[j] - 1].second);
				}
				else
				{
					printf("Infinity\n");
				}
				//printf("%d %d\n", E[j].second, E[j].first);
				//printf("	%d %d\n", N[EE[j] - 1].first, N[EE[j] - 1].second);
			}
		}
	}
	return 0;
}

并附上一张对于 hack 的自己画的图:

gold

1 条评论

  • 1

信息

ID
9
时间
1000ms
内存
256MiB
难度
8
标签
(无)
递交数
93
已通过
13
上传者