生命(哈密尔顿距离&切比雪夫距离+前缀和)
Posted shaokele
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生命(哈密尔顿距离&切比雪夫距离+前缀和)相关的知识,希望对你有一定的参考价值。
数据
题目大意: 已经很简洁了
题解:
对于每个询问,暴力枚举老蛤的位置,(O(1)) 统计答案
那么对着原图斜着维护前缀和就行了
或者将曼哈顿距离转换成切比雪夫距离
统计正方形区域前缀和
注意方案中枚举的老蛤的位置要再原图内
AC代码
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=2e3+5;
int n,K,Q,s,ans;
int a[N][N];
inline int read(){
int x=0;char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x;
}
int main(){
n=read();K=read();Q=read();
for(int i=1;i<=K;i++){
int x=read(),y=read();
a[x+y+1][x-y+n+1]++;
}
int mx=(n<<1)+1;
for(int i=1;i<=mx;i++)
for(int j=1;j<=mx;j++)
a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
while(Q--){
int s=min(read(),n+n);
ans=0;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
int x=i+j+1,y=i-j+n+1;
ans=max(ans,a[min(x+s,mx)][min(y+s,mx)]-a[min(x+s,mx)][max(y-s-1,0)]-a[max(x-s-1,0)][min(y+s,mx)]+a[max(x-s-1,0)][max(y-s-1,0)]);
}
printf("%d
",ans);
}
return 0;
}
作者:skl_win
出处:https://www.cnblogs.com/shaokele/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
以上是关于生命(哈密尔顿距离&切比雪夫距离+前缀和)的主要内容,如果未能解决你的问题,请参考以下文章
LuoguP3964 [TJOI2013]松鼠聚会切比雪夫距离/前缀和
BZOJ_3170_[Tjoi2013]松鼠聚会_切比雪夫距离+前缀和