测试代码:
#include<stdlib.h>
#include<iostream>
#include<utility>
#include<vector>
using namespace std;
int isCompare(pair<int, int>, pair<int, int>);
int main() {
vector<pair<int, int>> points;
vector<int> total,score;
vector<int> count_score;//0,1,2,3,4评分个数
pair<int, int> tmp;
vector<pair<int, int>> temp;//存放符合条件点的四个角的坐标
unsigned int num, i, j, k, l, m;
int count=0;
//输入所有的点
cin >> num;
for (i = 0; i < num; ++i) {
int x, y;
cin >> x >> y;
points.push_back(make_pair(x, y));
total.push_back(0);
score.push_back(0);
}
for (i = 0; i < 5; ++i) {
count_score.push_back(0);
}
//找出符合要求的点
for (i = 0; i < num; ++i) {
for (j = 0; j < 4; ++j) {
if (0 == j) {
tmp = make_pair(points[i].first, points[i].second + 1);
}
if (1 == j) {
tmp = make_pair(points[i].first, points[i].second - 1);
}
if (2 == j) {
tmp = make_pair(points[i].first+1, points[i].second);
}
if (3 == j) {
tmp = make_pair(points[i].first-1, points[i].second);
}
for (k = 0; k < num; ++k) {
if (k == i)
continue;
if (isCompare(tmp, points[k])) {
++count;
break;
}
}
}
if (4 == count) {
total[i] = 1;
temp.push_back(make_pair(points[i].first - 1, points[i].second + 1));
temp.push_back(make_pair(points[i].first - 1, points[i].second - 1));
temp.push_back(make_pair(points[i].first + 1, points[i].second + 1));
temp.push_back(make_pair(points[i].first + 1, points[i].second - 1));
//对满足条件的点进行评分
for (l = 0; l < num; ++l) {
for (m = 0; m < temp.size(); ++m) {
if (points[l].first == temp[m].first&&points[l].second == temp[m].second) {
++score[i];
}
}
}
temp.clear();
}
count = 0;
}
//统计得分个数
for (i = 0; i < num; ++i) {
if (0 == score[i] && 1==total[i]) {
++count_score[0];
continue;
}
if (1 == score[i] && 1 == total[i]) {
++count_score[1];
continue;
}
if (2 == score[i] && 1 == total[i]) {
++count_score[2];
continue;
}
if (3 == score[i] && 1 == total[i]) {
++count_score[3];
continue;
}
if (4 == score[i] && 1 == total[i]) {
++count_score[4];
continue;
}
}
for (i = 0; i < count_score.size(); ++i) {
cout << count_score[i]<< endl;
}
return 0;
}
int isCompare(pair<int, int> a, pair<int, int> b) {
if (a.first == b.first&&a.second == b.second)
return 1;
return 0;
}
使用vs2017编译运行所有测试用例均没问题,但提交到ccf系统中报编译错误,暂时不清楚原因,谁知道可以交流一下,目前g++和vs2017都没问题。