AtCoder Beginner Contest 377 补题

C - Avoid Knight Attack

链接: C - Avoid Knight Attack

思路:总网格数-被放上棋子的数量=空的方格数

AC代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int fx[8][2]={2,1,1,2,-1,2,-2,1,-2,-1,-1,-2,1,-2,2,-1};
signed main()
{
	int n,m;
	cin>>n>>m;
	set<pair<int,int>>sum;//set是一个以sum为命名的可以去重的容器
	//pair键值对绑定横纵坐标x,y
	for(int i=0;i<m;i++){
		int x,y;
		scanf("%lld %lld",&x,&y);
		sum.insert(pair<int,int>(x,y));   //注意计算他本身的点
		for(int i=0;i<8;i++){         //继续算他可以放上去的8个方向
			int xx=x+fx[i][0];
			int yy=y+fx[i][1];
			if(xx>=1&&xx<=n&&yy>=1&&yy<=n)
			    sum.insert(pair<int,int>(xx,yy));//符合条件则放入到set容器里
		}
	}
	cout<<n*n-sum.size()<<endl;

	return 0;
}

 

posted @ 2024-10-28 17:31  hanbaodao  阅读(5)  评论(0编辑  收藏  举报