zoukankan      html  css  js  c++  java
  • 生命(哈密尔顿距离&切比雪夫距离+前缀和)


    p1

    数据

    题目大意:   已经很简洁了

    题解:

      对于每个询问,暴力枚举老蛤的位置,(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/
      本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Emacs for OIer 的一些配置
    CF1336E Chiori and Doll Picking 【线性代数,组合计数】
    CF605E Intergalaxy Trips 【贪心,动态规划,期望】
    Luogu6329 【模板】点分树 | 震波
    [SDOI2014]数表
    [BZOJ4403]序列统计
    [BZOJ5099]Pionek
    SP1812 LCS2
    SA & SAM
    [HAOI2016]找相同字符
  • 原文地址:https://www.cnblogs.com/shaokele/p/9464107.html
Copyright © 2011-2022 走看看