CCF CSP 2019年 2题回收站选址

题意:

这个题讲的是,给你输入几个坐标点,如果这个坐标点的上下左右都有坐标点的话,就能够参与一个评分。看这个坐标点的左上角、左下角、右上角、右下角,有没有其他坐标点。如果一个都没有是零分、有一个是一分、有两个是二分、有三个是三分、有四个是四分 。

解题思路:

就用暴力就好了。虽然蠢一点但是能拿到分啊。

代码

#include 
#include 
#include 
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;
}


最后当然也是完美的通过啦
CCF CSP 2019年 2题回收站选址_第1张图片
欢迎大家来交流学习和指导。QQ:1364388975

你可能感兴趣的:(ccf,算法,c++)