Facebook Hacker Cup 2014 Qualification Round比赛Square Detector题的解题报告。单击这里打开题目链接(国内访问需要那个,你懂的)。

  原题如下:

Square Detector

Problem Description

You want to write an image detection system that is able to recognize different geometric shapes. In the first version of the system you settled with just being able to detect filled squares on a grid.

You are given a grid of N×N square cells. Each cell is either white or black. Your task is to detect whether all the black cells form a square shape.

Input

The first line of the input consists of a single number T, the number of test cases.

Each test case starts with a line containing a single integer N. Each of the subsequent N lines contain N characters. Each character is either "." symbolizing a white cell, or "#" symbolizing a black cell. Every test case contains at least one black cell.

Output

For each test case i numbered from 1 to T, output "Case #i: ", followed by YES or NO depending on whether or not all the black cells form a completely filled square with edges parallel to the grid of cells.

Constraints

1 ≤ T ≤ 20
1 ≤ N ≤ 20

Example

Test cases 1 and 5 represent valid squares. Case 2 has an extra cell that is outside of the square. Case 3 shows a square not filled inside. And case 4 is a rectangle but not a square.

Sample Input

5
4
..##
..##
....
....
4
..##
..##
#...
....
4
####
#..#
#..#
####
5
#####
#####
#####
#####
.....
5
#####
#####
#####
#####
#####

Sample Output

Case #1: YES
Case #2: NO
Case #3: NO
Case #4: NO
Case #5: YES

  首先,置正方形状态为true,然后横向扫描所有行,判断从“.”到“#”的切换次数。切换次数大于一次的,置正方形状态为false,退出循环。如果每行的“#”起始坐标或结束坐标不一致,也置正方形状态为false,退出循环。接着,如果正方形状态为true,再纵向扫描所有列,与行扫描一样的做法。最终,如果正方形状态为true,输出YES;否则,输出NO。

  C++语言代码如下:

#include <cstdio>
#include <cstdlib> #define MAX_LENGTH 100 using namespace std; int main()
{
bool square;
int line_changes;
int start_x, start_y, end_x, end_y;
int T;
static char s[MAX_LENGTH][MAX_LENGTH];
scanf("%d", &T);
for ( int i = ; i <= T; ++ i )
{
int n;
scanf("%d", &n);
gets(s[]);
start_x = start_y = -;
for ( int j = ; j < n; ++ j )
gets(s[j]);
square = true;
for ( int j = ; j < n; ++ j )
{
line_changes = ;
for ( int k = ; k < n; ++ k )
{
if ( k == && s[j][k] == '#' )
++line_changes;
if ( k > && s[j][k] == '#' && s[j][k-] == '.' )
++line_changes;
if ( line_changes > )
{
square = false;
break;
}
if ( s[j][k] == '#' )
{
end_x = j;
end_y = k;
if ( start_x == - )
{
start_x = j;
start_y = k;
}
}
}
}
if ( end_y - start_y != end_x - start_x )
square = false;
for ( int col = ; col < n; ++ col )
{
line_changes = ;
for ( int row = ; row < n; ++ row )
{
if ( row == && s[row][col] == '#' )
++line_changes;
if ( row > && s[row][col] == '#' && s[row-][col] == '.' )
++line_changes;
if ( line_changes > )
{
square = false;
break;
}
}
}
if ( square )
printf("Case #%i: YES\n", i);
else
printf("Case #%i: NO\n", i);
}
return EXIT_SUCCESS;
}

  另外,Facebook Hacker Cup还公布了官方的解法。官方解法是用Python语言写的(用的是 Python 2 的语法),代码如下:

def solve():
n = int(raw_input().strip())
b = [raw_input().strip() for i in range(n)]
black = 0
minX, maxX, minY, maxY = n, 0, n, 0
for x in range(0, n) :
for y in range(0, n) :
if b[x][y] == '#':
minX, minY = min(minX, x), min(minY, y)
maxX, maxY = max(maxX, x), max(maxY, y)
black += 1
dx = maxX - minX + 1
dy = maxY - minY + 1
return dx == dy and dx * dy == black if __name__ == '__main__':
t = int(raw_input().strip())
for i in range(1, t+1):
res = solve()
print 'Case #%d: %s' % (i, 'YES' if res else 'NO')

Facebook Hacker Cup 2014 Qualification Round 竞赛试题 Square Detector 解题报告的更多相关文章

  1. Facebook Hacker Cup 2014 Qualification Round

    2014 Qualification Round Solutions 2013年11月25日下午 1:34 ...最简单的一题又有bug...自以为是真是很厉害! 1. Square Detector ...

  2. DP VK Cup 2012 Qualification Round D. Palindrome pairs

    题目地址:http://blog.csdn.net/shiyuankongbu/article/details/10004443 /* 题意:在i前面找回文子串,在i后面找回文子串相互配对,问有几对 ...

  3. 51Nod 1182 完美字符串(字符串处理 贪心 Facebook Hacker Cup选拔)

    1182 完美字符串             题目来源:                         Facebook Hacker Cup选拔         基准时间限制:1 秒 空间限制:1 ...

  4. Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树动态规划)

    原标题:https://www.facebook.com/hackercup/problems.php?pid=759650454070547&round=344496159068801 题意 ...

  5. Facebook Hacker Cup 2015 Round 1--Winning at Sports(动态规划)

    原题:pid=688426044611322&round=344496159068801">https://www.facebook.com/hackercup/problem ...

  6. Facebook Hacker Cup 2015 Round 1--Homework(筛选法求素数)

    题意:给定A,B,K(A<=B)三个数,问在[A,B]范围内的数素数因子个数为K的个数. 题解:典型的筛选法求素数.首先建立一个保存素数因子个数的数组factorNum[],以及到n为止含有素数 ...

  7. VK Cup 2012 Qualification Round 1 C. Cd and pwd commands 模拟

    C. Cd and pwd commands Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/problemset ...

  8. VK Cup 2012 Qualification Round 2 C. String Manipulation 1.0 字符串模拟

    C. String Manipulation 1.0 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 codeforces.com/problemset/pr ...

  9. VK Cup 2012 Qualification Round 1---C. Cd and pwd commands

    Cd and pwd commands time limit per test 3 seconds memory limit per test 256 megabytes input standard ...

随机推荐

  1. UVA 11983 Weird Advertisement --线段树求矩形问题

    题意:给出n个矩形,求矩形中被覆盖K次以上的面积的和. 解法:整体与求矩形面积并差不多,不过在更新pushup改变len的时候,要有一层循环,来更新tree[rt].len[i],其中tree[rt] ...

  2. Codeforces 234D Cinema

    这题做的我好苦啊,编码调试整整搞了一个多小时,而且调到天昏地暗才调出来.. 回归正题,这题是一道本人做过的比较烦,比较无聊的题之一.题意是一个人,在m个影星里有k个喜欢的影星,然后给出n场电影,每场电 ...

  3. sizeof 和 strlen 的区别

    sizeof 和 strlen 都是c/c++ 中常见的符号,他们的功能是判断数组长度.那么他么到底有什么区别 1.sizeof    不是函数,而是一个操作符.字节数的计算在程序编译时进行,而不是在 ...

  4. 使用JspStudy集成环境快速部署jsp项目

    1. 安装jdk 本人网盘资源:https://yunpan.cn/ckZLNbqxkDYYe (提取码:b5e8) 去jdk官网下载最新的jdk: http://www.oracle.com/tec ...

  5. Lua笔记(1)

    今天开始学习Lua,下面把一些重点记下来: 单行注释-- ,多行注释 --[[  .......  --]] Lua中false和nil表示条件判断的假,其余的,包括空字符串,0,都表示真. Lua没 ...

  6. SEO在网页制作中的应用

    1.什么是SEOSEO(Search Engine Optimization)中文意译为“搜索引擎优化”.SEO是指通过网站内部调整优化及站外优化,使网站满足搜索引擎收录排名需求,在搜索引擎中提高关键 ...

  7. 【转】【Http】Http各种错误的意思

    IIS状态代码的含义 当用户试图通过HTTP或文件传输协议(FTP)访问一台正在运行Internet信息服务(IIS)的服务器上的内容时,IIS返回一个表示该请求的状态的数字代码.该状态代码记录在II ...

  8. mac基本用法

    1.屏幕截图 command + shift + 4 2.切换到桌面 command + f3 3.右击 双支轻拍 4.彻底退出窗口 command + q 5.关闭窗口 cmd + w 6.隐藏窗口 ...

  9. 【超详细教程】使用Windows Live Writer 2012和Office Word 2013 发布

    去年就知道有这个功能,不过没去深究总结过,最近有写网络博客的欲望了,于是又重新拾起这玩意儿. 具体到底是用Windows Live Writer 2012还是用Word 2013,个人觉得看个人,因为 ...

  10. [CareerCup] 10.2 Data Structures for Large Social Network 大型社交网站的数据结构

    10.2 How would you design the data structures for a very large social network like Facebook or Linke ...