CCF-CSP 201912-2 回收站选址
题目描述
思路
总之就是很丑陋的一题,暴力就完事。数据量不大,两层循环搞定。
代码
#include <iostream>
#include <vector>
using namespace std;
class Node{
public:
int x,y;
Node(int a, int b){
x = a;
y = b;
}
};
int main(){
int n;
cin >> n;
vector<Node> nodes;
int i;
int a,b;
for (i = 0; i < n; ++i){
cin >> a;
cin >> b;
nodes.push_back(Node(a,b));
}
int j;
int count[5] = {}; // 统计得分为0,1,2,3,4的数量
for (i = 0; i < n; ++i){
bool left = false, right = false, up = false, down = false;
int score = 0;
for (j = 0; j < n; ++j){
if (nodes[j].x < nodes[i].x - 1 || nodes[j].x > nodes[i].x + 1
|| nodes[j].y < nodes[i].y - 1 || nodes[j].y > nodes[i].y + 1) {
continue;
}
if (nodes[j].x == nodes[i].x - 1) {
if (nodes[j].y == nodes[i].y){
left = true;
}
else {
score++;
}
}
else if (nodes[j].x == nodes[i].x + 1){
if (nodes[j].y == nodes[i].y){
right = true;
}
else {
score++;
}
}
else {
if (nodes[j].y == nodes[i].y + 1){
up = true;
}
else if (nodes[j].y == nodes[i].y - 1){
down = true;
}
}
}
if (up && down && left && right){
count[score]++;
}
}
for (i = 0; i < 5; ++i) {
cout << count[i] << "\n";
}
return 0;
}