题目
Case 1:
输入:
7
1 2
2 1
0 0
1 1
1 0
2 0
0 1
输出:
0
0
1
0
0
解释:
如图所示,仅有(1,1)可选为回收地址,评分为2。
Case 2:
输入:
2
0 0
-100000 10
输出:
0
0
0
0
0
解释:
不存在可选地址
Case 3:
输入:
11
9 10
10 10
11 10
12 10
13 10
11 9
11 8
12 9
10 9
10 11
12 11
输出:
0
2
1
0
0
解释:
1分选址:(10,10)和(12,10);
2分选址:(11,9)。
子任务:
分析
分析: 遍历所有坐标,筛选符合选址要求的坐标,对符合选址要求的坐标进行得分的计算。
源码
#include <iostream>
using namespace std;
int main()
{
int n, a[1005][2] = { 0 };
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i][0] >> a[i][1];
}
int screen = 0;
int flag = 0;
int st[5] = { 0 };
for (int i = 0; i < n; i++)
{
flag = 0;
screen = 0;
for (int j = 0; j < n; j++)
{
if (a[i][0] + 1 == a[j][0] && a[i][1] == a[j][1]) {
flag++;
}
if (a[i][0] - 1 == a[j][0] && a[i][1] == a[j][1]) {
flag++;
}
if (a[i][1] + 1 == a[j][1] && a[i][0] == a[j][0]) {
flag++;
}
if (a[i][1] - 1 == a[j][1] && a[i][0] == a[j][0]) {
flag++;
}
}
if (flag == 4)
{
for (int j = 0; j < n; j++)
{
if (a[i][0] + 1 == a[j][0] && a[i][1] + 1 == a[j][1])
{
screen++;
}
if (a[i][0] + 1 == a[j][0] && a[i][1] - 1 == a[j][1])
{
screen++;
}
if (a[i][0] - 1 == a[j][0] && a[i][1] + 1 == a[j][1])
{
screen++;
}
if (a[i][0] - 1 == a[j][0] && a[i][1] - 1 == a[j][1])
{
screen++;
}
}
st[screen]++;
}
}
for (int i = 0; i < 5; i++)
{
cout << st[i] << endl;
}
return 0;
}