题目链接:
暴力。
对于每个人,在所有能射到他的地方\(+1\),最后为\(k\)的地方即为合法答案。
时间复杂度 \(O(nk)\)
代码:
#include <cstdio>
int n,k,c[105][105],s;
const int mx[]={-1,-1,0,1,1,1,0,-1},my[]={0,1,1,1,0,-1,-1,-1};
int main()
{
scanf("%d%d",&n,&k);
for(int i=1,x,y;i<=k;++i)
{
scanf("%d%d",&x,&y),++c[x][y];
for(int j=0;j<8;++j)
{
int xs=x,ys=y;
while((xs+=mx[j])>=1&&xs<=n&&(ys+=my[j])>=1&&ys<=n)
++c[xs][ys];
}
}
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
if(c[i][j]==k)
++s;
printf("%d\n",s);
return 0;
}