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. ZROI提高组模拟赛05总结

    ZROI提高组模拟赛05总结 感觉是目前为止最简单的模拟赛了吧 但是依旧不尽人意... T1 有一半的人在30min前就A掉了 而我花了1h11min 就是一个简单的背包,我硬是转化了模型想了好久,生 ...

  2. js onclick=‘save()’ 和 onclick='return save()'

    onclick="function()" 表示只会执行 function , 但是不会传回 function 中之回传值onclick = "return functio ...

  3. MVC ef 连接数据库

    1.创建数据库 2.创建表 <pre name="code" class="sql">CREATE TABLE [dbo].[Student]( [ ...

  4. .NET Core 1.0 CentOS7 尝试(一、安装)

    昨天宣布 ASP.NET Core RC2,据说差不多稳定了,以后不会有大改了. 参考:https://blogs.msdn.microsoft.com/webdev/2016/05/16/annou ...

  5. react之——render prop

    在react “从上至下的数据流原则” 背景下,常规的消息传递机制就是通过prop属性,把父级数据传递给子级,这样一种数据流通模式决定了——数据的接收方子组件要被”硬植入“进数据的数据的给予方父组件, ...

  6. iOS NSDate 常用日期相关函数的封装

    Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系. NSDate+Category.h 代码: #import & ...

  7. 导入maven的java web项目运行报错找不到Spring监听器

    本地成功运行的一个maven项目,在另一台机器复制下来并导入,运行时报错: java.lang.ClassNotFoundException: org.springframework.web.cont ...

  8. NBUT 1119 Patchouli's Books (STL应用)

    题意: 输入一个序列,每个数字小于16,序列元素个数小于9. 要求将这个序列所有可能出现的顺序输出,而且要字典序. 思路: 先排序,输出该升序序列,再用next_permutation进行转变即可,它 ...

  9. [转]八款开源Android游戏引擎

    八款开源Android游戏引擎 1.Angle Angle是一款专为Android平台设计的,敏捷且适合快速开发的2D游戏引擎,基于OpenGL ES技术开发.该引擎全部用Java代码编写,并且可以根 ...

  10. QT +样式表

    学习样式表的目的:可以设计出好看的控件.(比如可以给一些按钮设计成好看的图片) QT 样式表的思想很大程度上是来自于HTML的层叠式样式表(CSS),通过调用QWidget->setStyleS ...