题意:
这个题讲的是,给你输入几个坐标点,如果这个坐标点的上下左右都有坐标点的话,就能够参与一个评分。看这个坐标点的左上角、左下角、右上角、右下角,有没有其他坐标点。如果一个都没有是零分、有一个是一分、有两个是二分、有三个是三分、有四个是四分 。
解题思路:
就用暴力就好了。虽然蠢一点但是能拿到分啊。
代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<pair<int,int> > _v;struct Test
{
public:bool isTrue = false;void operator()(pair<int,int> t){bool sxzy[4] = { 0 };for (auto it = _v.begin(); it != _v.end(); it++){if ((*it).first == t.first && (*it).second == t.second + 1)sxzy[0] = true;if ((*it).first == t.first && (*it).second == t.second - 1)sxzy[1] = true;if ((*it).first == t.first-1 && (*it).second == t.second)sxzy[2] = true;if ((*it).first == t.first + 1 && (*it).second == t.second)sxzy[3] = true;}if (sxzy[0] && sxzy[1] && sxzy[2] && sxzy[3]){isTrue = true;}}};int js(pair<int,int> t)
{int s = 0;for (auto it = _v.begin(); it != _v.end(); it++){if ((*it).first == t.first - 1 && (*it).second == t.second - 1)s++;if ((*it).first == t.first - 1 && (*it).second == t.second + 1)s++;if ((*it).first == t.first + 1 && (*it).second == t.second - 1)s++;if ((*it).first == t.first + 1 && (*it).second == t.second + 1)s++;}return s;
}int main()
{int n;int s[5] = {0};scanf("%d", &n);for (int i = 0; i < n; i++){long long int a, b;scanf("%lld%lld", &a, &b);_v.push_back(pair<int,int>(a,b));}for (auto it = _v.begin(); it != _v.end(); it++){Test a;a(*it);if (a.isTrue){int ps = js(*it);s[ps] ++;}}for (int i = 0; i < 5; i++){cout << s[i] << endl;}return 0;
}
最后当然也是完美的通过啦
欢迎大家来交流学习和指导。QQ:1364388975