题目:有n行n列(2<=n<=9)的小黑点,还有m条线段连接其中的一些黑点,统计这些线段连成了多少个正方形(每种边长分别统计)

从上到下编号为1~n,从上到下编号为1~n。边用 H(i,j)V(i,j)表示, 分别表示 (i,j)-(i,j+1)和(i,j)-(i+1,j)。如图所示最左边的线段用V(1,1)表示。图中包含两个边长为1的正方形和一个边长为2的正方形。

思路:用边长为 len(1,2,3,4.....,n-1)的正方形分别放进带边的小黑点,如果放进后能恰好把图中的4条边覆盖,则这是一个正方形,如果没覆盖够4条边,则表示没有连成正方形。

如何判断放进边长为len的正方形后能覆盖多少条边呢? 我们可以试试按正方形的边走一圈,如果能走过4条边,则就证明能覆盖4条边。

我们首先用边长len的正方形竖着的边 进行遍历,

例如

len=1:

如果遍历到

V(i,j),就检测

V(i,j+1),

H(i,j),

H(i+1,j)。

len=2:

如果遍历到

V(i,j),就检测

V(i+1,j)

V(i,j+2)

V(i+1,j+1)

H(i,j)

H(i,j+1)

H(i+2,j)

H(i+2,j+1)

len=k:

如果遍历到

V(i+0,j),就检测

.....

V(i+(k-1),j)

V(i,j+k)

.....

V(i+(k-1),j+k)

H(i,j)

.....

H(i,j+(k-1))

H(i+k,j+0)

.....

H(i+k,j+(k-1))

所以判断是否为正方形的代码为:

bool judge(int a, int b, int len) {int i;for (i = 0; i < len; i++)if (V[a + i][b] == 0 || V[a + i][b + len] == 0 || H[a][b + i] == 0 || H[a + len][b + i] == 0)return 0;return 1;
}

遍历的时候,并不需要把每一条 竖着的边 都遍历,我们只需要遍历正方形左边的 “竖着的边”,如果正方形左边存在的话,接下来再遍历正方形的其他边

代码例:

#include<iostream>
using namespace std;int H[10][10];//记录纵边
int V[10][10];//记录横边bool judge(int a, int b, int len) { //判断正方形是否存在int i;for (i = 0; i < len; i++)if (V[a + i][b] == 0 || V[a + i][b + len] == 0 || H[a][b + i] == 0 || H[a + len][b + i] == 0)return 0;return 1;
}int main() {memset(H, 0, sizeof(H));memset(V, 0, sizeof(V));int Hcount, Vcount;cin >> Hcount;  //纵边数量cin >> Vcount; //横边数量int a, b, i;for (i = 0; i < Hcount; i++) {cin >> a >> b;H[a][b] = 1;}for (i = 0; i < Vcount; i++) {cin >> a >> b;V[a][b] = 1;}int len, n, sum;cin >> n;len = 1;sum = 0;while (len < n) {int i, j, k;for (i = 1; i <= n - len; i++) {for (j = 1; j <= n - len; j++) {for (k = 0; k < len; k++) {if (V[i + k][j] == 0)break;}if (k == len)//如果正方形左边的“竖着的边”存在,则继续判断其他边if (judge(i, j, len))sum++;}}len++;}cout << sum;return 0;
}

有错误的请大家指出。

数数正方形(ACM/ICPC World Finals)相关推荐

  1. 《算法竞赛入门经典》习题4-2 正方形 (Squares,ACM,ICPC World Finals 1990,UVa201)——仅提供大体方法

    原题及翻译 A children's board game consists of a square array of dots that contains lines connecting some ...

  2. ACM - ICPC World Finals 2013 A Self-Assembly

    原题下载 : http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 这道题其实是2013年我AC的第一道题,非常的开心,这 ...

  3. 《算法竞赛入门经典》 例题 4-4 信息编码 (Message Decoding,ACM,ICPC World Finals 1991,UVa 213)

    原题及翻译 Some message encoding schemes require that an encoded message be sent in two parts. 某些消息编码方案要求 ...

  4. 例题5-10 PGA巡回赛的奖金(PGA Tour Prize Money,ACM/ICPC World Finals 1990 UVa207)

    原题链接:https://vjudge.net/problem/UVA-207 分类:耐力 备注:排序和其他细节处理 前言:这是我第二次默写刘老师的代码了,真的崩溃,错一点点细节都不行,对着uDebu ...

  5. 谜题 (Puzzle,ACM/ICPC World Finals 1993,UVa227)

    题目描述:算法竞赛入门经典习题3-5 题目思路:模拟题 #include <stdio.h> #include <string.h> #define maxn 55 char ...

  6. 习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994, UVa232)

    原题vjudge 输入一个r行c列(1≤r,c≤10)的网格,黑格用"*"表示,每个白格都填有一个字母. 如 果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能出 ...

  7. UVa816 例题 6-14 Abbott的复仇 (Abbott's Revenge,ACM/ICPC World Finals 2000)

    原题链接: UVa-816 题目大意: 模有一个最多包含9*9个交叉点的迷宫.输入起点.离开起点时的朝向和终点,求一条最短路径.(具体题目参考原题和紫书) 解题思路: 本题是一道用BFS求最短路径的迷 ...

  8. 习题7-1 消防车(Firetruck,ACM/ICPC World Finals 1991, UVa208)

    原题链接:https://vjudge.net/problem/UVA-208 备注:回溯法 分类:DFS 代码如下: #include<cstdio> #include<cstri ...

  9. 习题7-3 多米诺效应(The Domino Effect, ACM/ICPC World Finals 1991, UVa211)

    谜一般的格式换行,为啥格式错报WA额. 这题也是用回溯法解决,只是判断情况稍微复杂些. 本质都是相同的,每次有两种决策,一行一行来处理. 当进行到某一行时,上一行还存在未vis的位置则回溯. #inc ...

最新文章

  1. 百度地图坐标系相关学习总结
  2. 用jquery修改默认的单选框radio或者复选框checkbox选择框样式
  3. leetcode 210. Course Schedule II | 210. 课程表 II(Java)
  4. Cenos6.4下远程连接mysql报错1130
  5. linux下cpu opencl加速,GPU挑战CPU!详解CUDA+OpenCL威力
  6. PCB相关的基础知识
  7. ofdm解调算法_OFDM系统中固定频偏算法
  8. python 对xlsx文件数根据日期进行统计分析_Python处理Excel的常用操作(一)
  9. excel去重_数据处理之EXCEL的高效技巧分享
  10. 关于numpy mean函数的axis参数
  11. 生成并绘制图像的直方图
  12. 力扣-58 最后一个单词的长度
  13. 美国邮编大全及邮政编码规范
  14. Linux下安装Java环境
  15. 简单说说jsonp原理
  16. C++实现控制台迷宫小游戏
  17. ktv无线服务器,KTV无线网络覆盖方案-无死角WIFI信号全覆盖方法
  18. 文本动画过渡效果AE模板
  19. 这几天心里颇不宁静,采的不是信号,而是寂寞
  20. 日常生活息息相关的数据分析应用,掌握了你就是最牛的数据分析师

热门文章

  1. 应对AI失控,研究人员提出用“人格障碍治疗”解决问题
  2. NLP通用模型诞生?一个模型搞定十大自然语言常见任务
  3. 搜狗上线海外权威健康搜索 支持中英双语一键切换
  4. synchronized 的超多干货!
  5. 内存泄漏排查攻略之:Show me your Memory
  6. IntelliJ IDEA 快捷键终极大全,速度收藏!
  7. 一副耳机的钱,竟让我体验了「元宇宙」办公
  8. 清华本硕男,月入5W征婚引群嘲“普通却自信”,本人终于回应了!
  9. 吴恩达:机器学习毕业后,如何规划职业生涯?
  10. 免费查找AI最优论文神器:一键出结果,分分钟提取论文表格、最新数据