AtCoder Beginner Contest 377 补题
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;
}