Problem J: Home on the Range 家的范围

来源:互联网 发布:手机直播软件排名 编辑:程序博客网 时间:2024/06/03 19:47

Home on the Range 家的范围

Description

农民约翰在一片边长是N (2 <= N <= 250)英里的正方形牧场上放牧他的奶牛.(因为一些原因,他的奶牛只在正方形的牧场上吃草.)
遗憾的是,他的奶牛已经毁坏一些土地.( 一些1 平方英里的正方形)
农民约翰需要统计那些可以放牧奶牛的正方形牧场(至少是2x2 的,在这些较大的正方形中没有小于1x1 的部分被分割毁坏).
你的工作要在被供应的数据组里面统计所有不同的正方形放牧区域(>2x2)的个数.
当然,放牧区域可能是重叠.

Input

第 1 行: N,牧区的边长.
第 2 到n+1 行: N 个没有空格分开的字符.
0 表示 “那一个区段被毁坏了”;1 表示 ” 准备好被吃”.

Output

输出那些存在的正方形的大小和个数,一种一行.

Sample Input

6
101111
001111
111111
001111
101101
111001

Sample Output

2 10
3 4
4 1

Solution

这道题不难,只要有点DP的小基础都可以A掉它。
题意就是想知道存在的正方形边数以及对应的个数。
首先读入的时候就要注意,因为样例的数与数之间并没有空格,所以我们需要用字符串读入,然后自行调整。
思想很简单,对于一个正方形来说,如果这个数的下、右、右下都存在值,并且这个位置不为0,则一定存在正方形。
从右下角开始慢慢扩散,则当前的值应为下、右、右下三点的最小值+1;
即map[i][j]=min{map[i+1][j],map[i][j+1],map[i+1][j+1]}+1;
然后统计一下输出就好了。
Code:

#include<stdio.h>#include<string.h>#define MAXN 500int n;char s[MAXN][MAXN];int f[MAXN][MAXN],num[MAXN],map[MAXN][MAXN];int min(int a,int b){    return a<b?a:b;}int main(){    scanf("%d",&n);    for(int i=1;i<=n;i++)    {        scanf("%s",s[i]);        for(int j=0;j<n;j++)        {            map[i][j+1]=s[i][j]-'0';        }    }    /*for(int i=1;i<=n;i++)    {        for(int j=1;j<=n;j++)        {            printf("%d ",map[i][j]);        }        printf("\n");    }*/    for(int i=n;i>=1;i--)    {        for(int j=n;j>=1;j--)        {            if(map[i][j])            {                map[i][j]=min(min(map[i+1][j],map[i][j+1]),map[i+1][j+1])+1;            }        }    }    /*    printf("\n");    for(int i=1;i<=n;i++)    {        for(int j=1;j<=n;j++)        {            printf("%d ",map[i][j]);        }        printf("\n");    }*/    for(int i=1;i<=n;i++)    {        for(int j=1;j<=n;j++)        {            for(int k=2;k<=n;k++)            {                if(map[i][j]>=k)                {                    num[k]++;                }            }        }    }    for(int i=2;i<=n;i++)    {        if(num[i])        {            printf("%d %d\n",i,num[i]);        }    }    return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 我25岁经常掉头发怎么办 25岁掉头发很厉害怎么办 我今年25岁掉头发怎么办 头顶头发稀少怎么办有方法吗 头发又干又黄怎么办 2岁宝宝头发细软怎么办 头发突然变得稀疏了怎么办 孕期掉头发很厉害怎么办 冬天头发掉的厉害怎么办 怀孕期间掉头发比较严重怎么办 头发油腻容易掉发怎么办 最近头发掉的厉害怎么办 头发新长的绒毛怎么办 久躺床上头发黏在一起怎么办 头发长油怎么办小妙招 头发出油多脱发怎么办 头发出油掉头发怎么办 在英国狂掉头发怎么办 我头发油头皮痒脱发怎么办 油性头发容易掉发怎么办 洗了头发很蓬松怎么办 小孩头皮黄掉头发怎么办 头发又油又掉发怎么办 英国的水掉头发怎么办 洗发为什么会掉头发怎么办 头发老掉怎么办吃什么 19岁掉头发严重怎么办 头发总是从根掉怎么办 18岁掉头发很厉害怎么办 20岁脱发严重该怎么办 22岁m型脱发严重怎么办 22掉头发很厉害怎么办 哺乳期头发掉的很厉害怎么办 失眠多梦掉头发怎么办 老婆生完孩子掉头发怎么办 16岁发际线高怎么办 生了小孩头发掉怎么办 16岁头发掉的厉害怎么办 经常脱发严重不长头发怎么办 产后3年一直脱发怎么办 生完宝宝头发掉怎么办