zoukankan      html  css  js  c++  java
  • P2733 家的范围 Home on the Range

    又是一校内模拟赛见的题

    不知道为什么出题人怎么这么喜欢USACO的Farmer John的他的牛。。。

    感觉这道题不是特别的难,但也不很水

      同机房的神仙们都说这个题是一道二维前缀和的裸题,但我当时的确没想起来是怎么一回事。
    所以就用了另一种办法来做。

    有毒的思路:

    在强行枚举起点和边长后,怎么快速判断,原来就是两个点之间1的数量为它边长的平方就好了嘛~
    所以 这里,我们只需要预处理一个累加数组就能很快的计算出来 两点之间1的数量了。
    因为不会循环满,所以不会TLE。

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<queue>
    #include<cmath>
    #include<cstring>
    
    using namespace std;
    const int N = 305;
    const int M = 500050;
    const int INF = 2147483647;
    
    int n,a[N][N];
    int cnt,ans[M];
    char g[N][N];
    
    inline int read(){
       int s = 0,w = 1;
       char ch = getchar();
       while(ch <= '0' || ch > '9') { if(ch=='-') w = -1; ch = getchar();}
       while(ch >= '0' && ch <= '9') s = s * 10 + ch - '0',ch = getchar();
       return s * w;
    }
    void work(){
    	for(int i = n - 1 ; i >= 0 ; i--)
    		for(int j = n - 1 ; j >= 0 ; j--) {
    			if(g[i][j] == '1') {
    				cnt = INF;
    				cnt = min(cnt,a[i + 1][j + 1]);
    				cnt = min(cnt,a[i + 1][j]);
    				cnt = min(cnt,a[i][j + 1]);
    				a[i][j] = cnt + 1;
    			}
    		}
    	for(int i = 0 ; i < n ; i++)
    		for(int j = 0 ; j < n ; j ++) {
    			//a[i][j] ++;
    			ans[a[i][j]]++;
    		}
    	for(int i = n ; i >= 2 ; i--)
    		ans[i - 1] += ans[i];
     	for(int i = 2 ; i <= n ; i++) {
    		if(ans[i]) {
    			printf("%d %d 
    ",i,ans[i]);
    		}
    	}
    }
    
    
    int main() {
    	//freopen("home.in","r",stdin);
    	//freopen("home.out","w",stdout);
    	n = read();
    	for(int i = 0 ; i < n ; i++) { 
    		scanf("%s",g[i]);
    		for(int j = 0 ; j < n ; j ++) {
    			//a[i][j] = g[i][j] == '1' ? 1 : 0;
    			a[i][j] = g[i][j];
    			if(a[i][j] == '1') a[i][j] = 1;
    			else a[i][j] = 0;
    		}
    	}
    	work();
    	return 0;
    }
    
    
  • 相关阅读:
    Tomcat日志、项目中的log4j日志、e.printStackTrace()——我的日志最后到底跑哪去了?
    MySQL中有关TIMESTAMP和DATETIME的总结
    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
    @RequestBody和@RequestParam区别
    Synchronized的jvm实现
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
    星空雅梦
  • 原文地址:https://www.cnblogs.com/Repulser/p/9588666.html
Copyright © 2011-2022 走看看