数数正方形(ACM/ICPC World Finals)
题目:有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)相关推荐
- 《算法竞赛入门经典》习题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 ...
- ACM - ICPC World Finals 2013 A Self-Assembly
原题下载 : http://icpc.baylor.edu/download/worldfinals/problems/icpc2013.pdf 这道题其实是2013年我AC的第一道题,非常的开心,这 ...
- 《算法竞赛入门经典》 例题 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. 某些消息编码方案要求 ...
- 例题5-10 PGA巡回赛的奖金(PGA Tour Prize Money,ACM/ICPC World Finals 1990 UVa207)
原题链接:https://vjudge.net/problem/UVA-207 分类:耐力 备注:排序和其他细节处理 前言:这是我第二次默写刘老师的代码了,真的崩溃,错一点点细节都不行,对着uDebu ...
- 谜题 (Puzzle,ACM/ICPC World Finals 1993,UVa227)
题目描述:算法竞赛入门经典习题3-5 题目思路:模拟题 #include <stdio.h> #include <string.h> #define maxn 55 char ...
- 习题3-6 纵横字谜的答案(Crossword Answers, ACM/ICPC World Finals 1994, UVa232)
原题vjudge 输入一个r行c列(1≤r,c≤10)的网格,黑格用"*"表示,每个白格都填有一个字母. 如 果一个白格的左边相邻位置或者上边相邻位置没有白格(可能是黑格,也可能出 ...
- UVa816 例题 6-14 Abbott的复仇 (Abbott's Revenge,ACM/ICPC World Finals 2000)
原题链接: UVa-816 题目大意: 模有一个最多包含9*9个交叉点的迷宫.输入起点.离开起点时的朝向和终点,求一条最短路径.(具体题目参考原题和紫书) 解题思路: 本题是一道用BFS求最短路径的迷 ...
- 习题7-1 消防车(Firetruck,ACM/ICPC World Finals 1991, UVa208)
原题链接:https://vjudge.net/problem/UVA-208 备注:回溯法 分类:DFS 代码如下: #include<cstdio> #include<cstri ...
- 习题7-3 多米诺效应(The Domino Effect, ACM/ICPC World Finals 1991, UVa211)
谜一般的格式换行,为啥格式错报WA额. 这题也是用回溯法解决,只是判断情况稍微复杂些. 本质都是相同的,每次有两种决策,一行一行来处理. 当进行到某一行时,上一行还存在未vis的位置则回溯. #inc ...
最新文章
- 百度地图坐标系相关学习总结
- 用jquery修改默认的单选框radio或者复选框checkbox选择框样式
- leetcode 210. Course Schedule II | 210. 课程表 II(Java)
- Cenos6.4下远程连接mysql报错1130
- linux下cpu opencl加速,GPU挑战CPU!详解CUDA+OpenCL威力
- PCB相关的基础知识
- ofdm解调算法_OFDM系统中固定频偏算法
- python 对xlsx文件数根据日期进行统计分析_Python处理Excel的常用操作(一)
- excel去重_数据处理之EXCEL的高效技巧分享
- 关于numpy mean函数的axis参数
- 生成并绘制图像的直方图
- 力扣-58 最后一个单词的长度
- 美国邮编大全及邮政编码规范
- Linux下安装Java环境
- 简单说说jsonp原理
- C++实现控制台迷宫小游戏
- ktv无线服务器,KTV无线网络覆盖方案-无死角WIFI信号全覆盖方法
- 文本动画过渡效果AE模板
- 这几天心里颇不宁静,采的不是信号,而是寂寞
- 日常生活息息相关的数据分析应用,掌握了你就是最牛的数据分析师
热门文章
- 应对AI失控,研究人员提出用“人格障碍治疗”解决问题
- NLP通用模型诞生?一个模型搞定十大自然语言常见任务
- 搜狗上线海外权威健康搜索 支持中英双语一键切换
- synchronized 的超多干货!
- 内存泄漏排查攻略之:Show me your Memory
- IntelliJ IDEA 快捷键终极大全,速度收藏!
- 一副耳机的钱,竟让我体验了「元宇宙」办公
- 清华本硕男,月入5W征婚引群嘲“普通却自信”,本人终于回应了!
- 吴恩达:机器学习毕业后,如何规划职业生涯?
- 免费查找AI最优论文神器:一键出结果,分分钟提取论文表格、最新数据