总结
对于斜线移动的情况,即位置为 的点可以跳跃到 、 、 或 。
为方便处理,我们旋转平面直角坐标系45°,同时以旋转后的格对标旋转前的格
若旋转前坐标为,那么旋转后坐标
可以发现旋转后的距离问题变成了曼哈顿距离:若两点的的奇偶性相同则可以相互到达,,否则无法到达
E - Jump Distance Sum
求解,直接做会存在绝对值的问题
正确的做法是先根据与它们的奇偶性分为四组,对于每一组升序排序后求贡献
void SINGLE_TEST()
{
int n;cin>>n;
vector<int> x(n+1),y(n+1);
vector<vector<int>> g(4);
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i];
g[(x[i]+y[i])%2].push_back(x[i]+y[i]);
g[2+(x[i]+y[i])%2].push_back(x[i]-y[i]);
}
for(int i=0;i<4;i++) sort(g[i].begin(),g[i].end());
ll ans=0;
for(int loc=0;loc<4;loc++){
int siz=g[loc].size();
for(int i=0;i<siz;i++){
ans+=(i-(siz-i-1))*g[loc][i];
}
}
cout<<ans/2<<'\n';
}