题目传送门
这道题乍看起来就像一道刚入门的蒟蒻练习数组的题目,但是数据范围为 ,不可能开下这么大的数组,怎么办呢?
莫慌,总点数只有 个,所有点能走一次“日”到达的点最多也就
个,我们可以用
stl
中的 map
以 pair<int,int>
作为键,来维护每个点能攻击到的点个数,注意一下原本点所在的位置不能放马就可以了。
代码如下,时间复杂度 :
#include <bits/stdc++.h>
#define pii pair<int, int>
#define fi first
#define se second
#define mkp make_pair
using namespace std;
const int N=2e5+5, nx[]={-1,-2,-2,-1,1,2,2,1}, ny[]={-2,-1,1,2,2,1,-1,-2};
int n, x[N], y[N], ans, ansx, ansy;
map<pii, int> mp;
int main(){
scanf("%d", &n);
for(int i=1; i<=n; ++i){
scanf("%d%d", &x[i], &y[i]);
mp[mkp(x[i],y[i])] = -1;
}
int t;
for(int i=1; i<=n; ++i){
for(int j=0,xx,yy; j<8; ++j){
xx=x[i]+nx[j], yy=y[i]+ny[j];
if(xx>0 && yy>0 && mp[mkp(xx,yy)]!=-1){
t = ++mp[mkp(xx,yy)];
if(t > ans){
ansx=xx, ansy=yy, ans=t;
}
}
}
}
printf("%d %d\n", ansx, ansy);
return 0;
}