Squares

A children’s board game consists of a square array of dots that contains lines connecting some of the pairs of adjacent dots. One part of the game requires that the players count the number of squares of certain sizes that are formed by these lines. For example, in the figure shown below, there are 3 squares — 2 of size 1 and 1 of size 2. (The “size” of a square is the number of lines segments required to form a side.)



Your problem is to write a program that automates the process of counting all the possible squares.

Input

The input file represents a series of game boards. Each board consists of a description of a square array of n2 dots (where 2 ≤ n ≤ 9) and some interconnecting horizontal and vertical lines. A record for a single board with n2 dots and m interconnecting lines is formatted as follows:

Information for each line begins in column 1. The end of input is indicated by end-of-file. The first record of the sample input below represents the board of the square above.

Output

For each record, label the corresponding output with ‘Problem #1’, ‘Problem #2’, and so forth. Output for a record consists of the number of squares of each size on the board, from the smallest to the largest. lf no squares of any size exist, your program should print an appropriate message indicating so. Separate output for successive input records by a line of asterisks between two blank lines, like in the sample below.

Sample Input

4

16

H 1 1

H 1 3

H 2 1

H 2 2

H 2 3

H 3 2

H 4 2

H 4 3

V 1 1

V 2 1

V 2 2

V 2 3

V 3 2

V 4 1

V 4 2

V 4 3

2

3

H 1 1

H 2 1

V 2 1

Sample Output

Problem #1

2 square (s) of size 1 1 square (s) of size 2

************************”(无引号)

Problem #2

No completed squares can be found.


解题心得

  1. 说实话被这个题给恶心惨了,在输出上为难人就算了,还要在输入描述上坑人,H i j 和 V i j 其中i并不是都是表示行,j都是表示列,坑人的啊。
  2. 具体的做法很简单,毕竟数据这么小,直接暴搜。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 15;
bool maps[maxn][maxn][maxn][maxn];
//maps[i][j][x][y]为真的时候代表点(i,j)到(x,y)之间有连线
int ans[maxn]; void get_ans(int n)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
int len = 1;
while(i+len<=n && j+len<=n)//从每一个点直接搜索,扩展长度就可以了
{
bool flag = false;
for(int k=0;k<len;k++)
if(!maps[i][j+k][i][j+k+1])
flag = true; for(int k=0;k<len;k++)
if(!maps[i+len][j+k][i+len][j+k+1])
flag = true; for(int k=0;k<len;k++)
if(!maps[i+k][j][i+k+1][j])
flag = true; for(int k=0;k<len;k++)
if(!maps[i+k][j+len][i+k+1][j+len])
flag = true; if(!flag)
ans[len]++;
len++;
}
} bool flag = false;
for(int i=1;i<=n;i++)
if(ans[i])
flag = true;
if(!flag)
printf("No completed squares can be found.\n");
else
{
for(int i=1;i<=n;i++)
if(ans[i])
printf("%d square (s) of size %d\n",ans[i],i);
}
} int main()
{
int n,t;
t = 1;
bool flag = false;
while(scanf("%d",&n) != EOF)
{
if(flag)
printf("\n**********************************\n\n");
flag = true;
printf("Problem #%d\n\n",t++);
memset(maps,0,sizeof(maps));
memset(ans,0,sizeof(ans));
int num;
scanf("%d",&num);
while(num--)
{
char ch[5];
int s,e;
scanf("%s%d%d",ch,&s,&e);
if(ch[0] == 'H')
maps[s][e][s][e+1] = true;
else
maps[e][s][e+1][s] = true;
}
get_ans(n);
}
return 0;
}

BFS:UVa201-Squares的更多相关文章

  1. uva201 Squares

     Squares  A children's board game consists of a square array of dots that contains lines connecting ...

  2. [刷题]算法竞赛入门经典(第2版) 4-2/UVa201 - Squares

    书上具体所有题目:http://pan.baidu.com/s/1hssH0KO 代码:(Accepted,20 ms) #include<iostream> #include<cs ...

  3. [LUOGU2730] 魔板

    搜索水题.因为只有8个数,排列一共有40320种,直接bfs,判重就行了. 但是判重的时候直接用8进制表示的话要88的bool数组.这种操作太low了,于是我们可以用康托展开,降成8!. 康托展开其实 ...

  4. UVALive 4025 Color Squares(BFS)

    题目链接:UVALive 4025 Color Squares 按题意要求放带有颜色的块,求达到w分的最少步数. //yy:哇,看别人存下整个棋盘的状态来做,我什么都不想说了,不知道下午自己写了些什么 ...

  5. 哈希+Bfs【P2730】 魔板 Magic Squares

    没看过题的童鞋请去看一下题-->P2730 魔板 Magic Squares 不了解康托展开的请来这里-->我这里 至于这题为什么可以用康托展开?(瞎说时间到. 因为只有8个数字,且只有1 ...

  6. Leetcode之广度优先搜索(BFS)专题-279. 完全平方数(Perfect Squares)

    Leetcode之广度优先搜索(BFS)专题-279. 完全平方数(Perfect Squares) BFS入门详解:Leetcode之广度优先搜索(BFS)专题-429. N叉树的层序遍历(N-ar ...

  7. USACO3.25Magic Squares(bfs)

    /* ID: shangca2 LANG: C++ TASK: msquare */ #include <iostream> #include<cstdio> #include ...

  8. (BFS) leetcode 279. Perfect Squares

    Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 1 ...

  9. 洛谷 - P2730 - 魔板 Magic Squares - bfs

    写状态转移弄了很久,老了,不记得自己的数组是怎么标号的了. #include <bits/stdc++.h> using namespace std; #define ll long lo ...

  10. 【习题 4-2 Uva201】Squares

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 注意那个星号的数量... 然后V x y的话,是从(y,x)向(y+1,x)连线. H x y才是从(x,y)向(x,y+1)连线 ...

随机推荐

  1. laravel使用swoole

    参考 参考2 另外主要用到artisan 首先创建SwooleCommand.php <?php namespace App\Console\Commands; use App\Http\Con ...

  2. [软件工程基础]2017.11.03 第七次 Scrum 会议

    具体事项 项目交接燃尽图 每人工作内容 成员 已完成的工作 计划完成的工作 工作中遇到的困难 游心 #10 搭建可用的开发测试环境:#9 阅读分析 PhyLab 后端代码与文档:#8 掌握 Larav ...

  3. 牛客寒假5-J.炫酷数学

    链接:https://ac.nowcoder.com/acm/contest/331/J 题意: 小希最近想知道一个东西,就是A+B=A|B(其中|为按位或)的二元组有多少个. 当然,直接做这个式子对 ...

  4. springBoot + mybatis实现执行多条sql语句出错解决方法

    在Idea中执行多条sql语句的修改(mybatis默认的是执行sql语句是执行单条,所以要执行多条的时候需要进行配置) 需要在连接字符串中添加上&allowMultiQueries=true ...

  5. spring mvc 获取所有注册的url

    背景:坑货同事写代码一点规范都没有,瞎写,根据url没法直接定位到方法,无奈产生了此接口,程序员何苦为难程序员呢 @Autowired private RequestMappingHandlerMap ...

  6. 【踩坑】Safari不兼容webpack封装的vue项目

    刚完成 Iblog 博客项目,在 chrome 浏览器调试完后,用 Safari 打开网站,页面一直停留在加载状态. 后来网上说这是 Safari 不支持 ES6 所致. 经过搜索,在 github ...

  7. ios 自定义消息提示框

    自定义提示框,3秒钟后自动消失.如上图显示效果. 提示框加载代码: - (void)viewDidLoad { [super viewDidLoad]; //将view背景颜色变更为黄色 self.v ...

  8. Spark-水库抽样-根据抽样率确定每个分区的样本大小

    /* * 输入:采样率,待采样的RDD * 输出:每个分区的样本大小(记录数) * 由采样率确定,每个分区的样本大小 */ def findNumPerPartition[T: ClassTag, U ...

  9. IT之家学院:使用CMD命令行满速下载百度云

    转自:https://www.toutiao.com/a6545305189685920259/?tt_from=android_share&utm_campaign=client_share ...

  10. NF!=1

    NF表示列数,不等于1表示列数不为1列