首先,我要声泪俱下地控诉USACO的暴行,是它让一个幼小的心灵受到一次次残忍的伤害。

题目

Farmer John grazes his cows on a large, square field N (2 <= N <= 250) miles on a side (because, for some reason, his cows will only graze on precisely square land segments). Regrettably, the cows have ravaged some of the land (always in 1 mile square increments). FJ needs to map the remaining squares (at least 2x2 on a side) on which his cows can graze (in these larger squares, no 1x1 mile segments are ravaged).

Your task is to count up all the various square grazing areas within the supplied dataset and report the number of square grazing areas (of sizes >= 2x2) remaining. Of course, grazing areas may overlap for purposes of this report.

PROGRAM NAME: range

INPUT FORMAT

Line 1: N, the number of miles on each side of the field.
Line 2..N+1: N characters with no spaces. 0 represents "ravaged for that block; 1 represents "ready to eat".

SAMPLE INPUT (file range.in)

6
101111
001111
111111
001111
101101
111001

OUTPUT FORMAT

Potentially several lines with the size of the square and the number of such squares that exist. Order them in ascending order from smallest to largest size.

SAMPLE OUTPUT (file range.out)

2 10
3 4
4 1

题意(题目翻译来自NOCOW)

题目背景

农民约翰在一片边长是N (2 <= N <= 250)英里的正方形牧场上放牧他的奶牛。(因为一些原因,他的奶牛只在正方形的牧场上吃草。)遗憾的是,他的奶牛已经毁坏一些土地。( 一些1平方英里的正方形)

题目描述

农民约翰需要统计那些可以放牧奶牛的正方形牧场(至少是2x2的,在这些较大的正方形中没有一个点是被破坏的,也就是说,所有的点都是“1”)。

你的工作要在被供应的数据组里面统计所有不同的正方形放牧区域(>=2x2)的个数。当然,放牧区域可能是重叠。

输入格式

第 1 行:N,牧区的边长。

第 2 到 n+1 行:N个没有空格分开的字符。0 表示 "那一个区段被毁坏了";1 表示 " 准备好被吃"。

输出格式

输出那些存在的正方形的边长和个数,一种一行。

输入输出样例

输入 #1

6
101111
001111
111111
001111
101101
111001

输出 #1

2 10
3 4
4 1

“错误代码”:我真的不知道哪里错了?洛谷过了,而USACO使劲恶心我……~~~~(>_<)~~~~

然而我是社会主义接班人啊,怎么能被一个M国的垃圾USACO打倒(ノへ ̄、)

所以我(๑•̀ㅂ•́)و✧先展示一下它是怎么恶心我的:)

1:)

最初代码,洛谷过了

/*
ID:***(我不告诉你)
TASK:range
LANG:C++
*/
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<map>
#include<queue>
using namespace std;
#define ll long long
int n;
char s[252];
int f[252][252][252];//f[x][i][j]:右下角坐标为(i,j)的边长为x的正方形是否存在
int ans[252];
int main()
{//freopen("range.in","r",stdin);//freopen("range.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%s",s+1);for(int j=1;j<=n;j++)f[1][i][j]=s[j]-'0';}/*for(int i=1;i<=n;i++){for(int j=1;j<=n;j++)printf("%d",f[1][i][j]);printf("\n");}*/for(int x=2;x<=n;x++)for(int i=x;i<=n;i++)for(int j=x;j<=n;j++)if(f[x-1][i-1][j-1]&&f[1][i][j]&&f[x-1][i][j-1]&&f[x-1][i-1][j]){f[x][i][j]=1;ans[x]++;}for(int i=1;i<=n;i++)if(ans[i]>0)printf("%d %d\n",i,ans[i]);
}

遭受到的打击

没关系,我改,只是我看不懂这个错误怎么办?好像看到了c++相关问题,那,我改成c吧

/*
ID:(我相信你不想知道)
TASK:range
LANG:C
*/
#include<stdio.h>
int n;
char s[252];
bool f[252][252][252];
int ans[252];
int main()
{freopen("range.in","r",stdin);freopen("range.out","w",stdout);scanf("%d",&n);int i,j;for(i=1;i<=n;i++){scanf("%s",s);for(j=0;j<n;j++)if(s[j+1]=='1')f[1][i][j+1]=1;}int x;for(x=2;x<=n;x++)for(i=x;i<=n;i++)for(j=x;j<=n;j++)if(f[x-1][i-1][j-1]&&f[1][i][j]&&f[x-1][i][j-1]&&f[x-1][i-1][j]){f[x][i][j]=1;ans[x]++;}for(i=2;i<=n;i++)if(ans[i]>0)printf("%d %d\n",i,ans[i]);return 0;
}

对,你没有看错,它CE,因为c居然没有bool类型

没关系,改int

/*
ID:(别看)
TASK:range
LANG:C
*/
#include<stdio.h>
int n;
char s[252];
int f[252][252][252];
int ans[252];
int main()
{freopen("range.in","r",stdin);freopen("range.out","w",stdout);scanf("%d",&n);int i,j;for(i=1;i<=n;i++){scanf("%s",s);for(j=0;j<n;j++)if(s[j+1]=='1')f[1][i][j+1]=1;}int x;for(x=2;x<=n;x++)for(i=x;i<=n;i++)for(j=x;j<=n;j++)if(f[x-1][i-1][j-1]&&f[1][i][j]&&f[x-1][i][j-1]&&f[x-1][i-1][j]){f[x][i][j]=1;ans[x]++;}for(i=2;i<=n;i++)if(ans[i]>0)printf("%d %d\n",i,ans[i]);return 0;
}

O(≧口≦)O啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

其实我本不应该抓狂,因为才只错了三次,但是在改c之前我已经错了很久很久很久很久很久很久很久很久了,所以我爆了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

坚持不懈的我就像那用药药不死,打死还能繁殖的苏小强,我的我要爆了!!!!!!

放上正解

我真的不知道我为什么还要写悲惨经历,可能是喜欢上了自虐的感觉

/*
ID:(偶雷欧雷欧雷欧雷欧雷)
TASK:range
LANG:C++
*/
#include<cstdio>
int n;
char s[252];
int f[252][252];//f[i][j]:右下角坐标为(i,j)的最大正方形边长
int ans[252];
int main()
{//freopen("range.in","r",stdin);//freopen("range.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%s",s+1);for(int j=1;j<=n;j++)if(s[j]=='1')f[i][j]=1;}for(int x=2;x<=n;x++)for(int i=x;i<=n;i++)for(int j=x;j<=n;j++)if(f[i-1][j-1]>=x-1&&f[i][j]>=1&&f[i][j-1]>=x-1&&f[i-1][j]>=x-1){f[i][j]=x;ans[x]++;}for(int i=1;i<=n;i++)if(ans[i]>0)printf("%d %d\n",i,ans[i]);return 0;
}

思路

f[i][j]:右下角坐标为(i,j)的最大正方形边长

如果f[i-1][j-1]、f[i][j-1]、f[i-1][j]都大于等于x-1且f[i][j]>=1(就是(i,j)为1)就可以更新啦

家的范围 Home on the Range【USACO 3.3 】相关推荐

  1. 洛谷—— P2733 家的范围 Home on the Range

    https://www.luogu.org/problem/show?pid=2733 题目背景 农民约翰在一片边长是N (2 <= N <= 250)英里的正方形牧场上放牧他的奶牛.(因 ...

  2. Luogu P2733 家的范围 Home on the Range

    题意: 给你一个01方阵,求不同大小的全1方阵的个数 思路: 对每个点,判断以它左上角的点的方阵是否为全1方阵,若有n*n的全1方阵,则(n-1)^2的方阵必为全1,所以要判断n^2是否为全1方阵,前 ...

  3. c#操作Word文件 导出数据到word文档 (table 书签方式)

    1.添加一个table 显示成问答两列 using System; using System.Collections.Generic; using System.Data; using System. ...

  4. 打家劫舍(首尾相连)Python解法

    你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房 ...

  5. [转]python各模块的学习

    [-] 01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 ...

  6. usaco Home on the Range

    dp关系式搞清楚就行了,我看题解的没想出来.a[i][j]=min(a[i+1][j],a[i][j+1],a[i+1][j+1])+1;他的右方下方右下方保证了他可以延伸的长度. /* ID: ji ...

  7. 【USACO题库】 动态规划 汇总(普及-/普及)

    数据结构提高是够用了=-=虽然树状数组没学 但是其他类问题只能打到普及 普及啊啊啊!!! 而且这边省选组都是什么仙人掌啊,什么系什么点对啊...感觉数据结构并没有什么用 (实际上很有用但我不会用就是了 ...

  8. 如何高效地爬取链家的房源信息(四)

    "Python实现的链家网站的爬虫第四部分,最后一部分." 本系列文将以链家南京站为例,使用Python实现链家二手房源信息的爬虫,将数据爬取,并存入数据库中,以便使用. 本系列第 ...

  9. 如何高效地爬取链家的房源信息(三)

    "Python实现的链家网站的爬虫第三部分." 本系列文将以链家南京站为例,使用Python实现链家二手房源信息的爬虫,将数据爬取,并存入数据库中,以便使用. 本系列第一部分为基础 ...

最新文章

  1. Gin源码解析和例子——路由
  2. Elk5安装X-Pack
  3. 交互设计师到底是干嘛的
  4. linuxpython重定向_linux命令重定向、、 1、 2、 1、 2、
  5. 数据库-优化-pt-kill-授权-数据
  6. 简单实现KeyChain实例
  7. 详解 Cookie 纪要(vue.cookie,jquery.cookie简化)
  8. dao层如何调用对象_以k8s集群管理为例,大牛教你如何设计优秀项目架构
  9. C#点滴 – 内建基本类型
  10. 第2章 转动眼珠的圆脸(《Python趣味创意编程》教学视频)
  11. 支持多浏览器的js拖拽 (转domkey0303 的blog)
  12. 通过JS改变框架的src
  13. c语言程序计算器清屏功能,C语言实现计算器功能
  14. coupon优惠券 -- CSS样式
  15. 反恐精英代码_CS:GO源代码泄露;腾讯6月举办游戏发布会;侍魂:晓同名主题曲公布...
  16. html投影电脑,投影仪怎么连接电脑 电脑连接投影仪方法【步骤】
  17. python如何控制运行时间_Python控制函数运行时间
  18. 利用VS2019对程序进行时间性能分析
  19. 飞凌国产芯片系列经验分享|A40i开发板应用笔记-PWM 的应用
  20. html5 canvas时光隧道3D粒子动画js特效

热门文章

  1. 华为手机信息不弹屏了为什么_华为微信不弹出新消息提醒 怎么办
  2. java 折扣_Java折扣计算
  3. 解决IndexError: Target 2 is out of bounds.
  4. javax.servlet.Filter详解(二) 转自:http://hi.baidu.com/jxnuywf/blog/item/f3834aee93e2fdf8b2fb95cc.html
  5. StackExchange.Redis Timeout awaiting response
  6. 原生高性能抓包工具Proxyman,送给爱学习的你
  7. 向量空间模型 - 维基百科,自由的百科全书
  8. win 7家庭组无可用计算机,win7无法在此计算机上设置家庭组怎么办
  9. (转)牛顿和哈雷的故事(重点看一下牛顿老时候)
  10. SWD是一种串行调试接口