Facebook Hacker Cup 2014 Qualification Round 竞赛试题 Square Detector 解题报告
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 ≤ 20Example
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 解题报告的更多相关文章
- Facebook Hacker Cup 2014 Qualification Round
2014 Qualification Round Solutions 2013年11月25日下午 1:34 ...最简单的一题又有bug...自以为是真是很厉害! 1. Square Detector ...
- DP VK Cup 2012 Qualification Round D. Palindrome pairs
题目地址:http://blog.csdn.net/shiyuankongbu/article/details/10004443 /* 题意:在i前面找回文子串,在i后面找回文子串相互配对,问有几对 ...
- 51Nod 1182 完美字符串(字符串处理 贪心 Facebook Hacker Cup选拔)
1182 完美字符串 题目来源: Facebook Hacker Cup选拔 基准时间限制:1 秒 空间限制:1 ...
- Facebook Hacker Cup 2015 Round 1--Corporate Gifting(树动态规划)
原标题:https://www.facebook.com/hackercup/problems.php?pid=759650454070547&round=344496159068801 题意 ...
- Facebook Hacker Cup 2015 Round 1--Winning at Sports(动态规划)
原题:pid=688426044611322&round=344496159068801">https://www.facebook.com/hackercup/problem ...
- Facebook Hacker Cup 2015 Round 1--Homework(筛选法求素数)
题意:给定A,B,K(A<=B)三个数,问在[A,B]范围内的数素数因子个数为K的个数. 题解:典型的筛选法求素数.首先建立一个保存素数因子个数的数组factorNum[],以及到n为止含有素数 ...
- 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 ...
- 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 ...
- 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 ...
随机推荐
- js对Date对象的操作的问题(生成一个倒数7天的数组)
今天在论坛上看到这样一个问题如下: 问题描述: 使用JavaScript生成一个倒数7天的数组.比如今天是10月1号,生成的数组是["9月25号","9月26号" ...
- 2014 Super Training #10 D 花生的序列 --DP
原题: FZU 2170 http://acm.fzu.edu.cn/problem.php?pid=2170 这题确实是当时没读懂题目,连样例都没想通,所以没做了,所以还是感觉这样散漫的做不好,有些 ...
- SSM ( Spring 、 SpringMVC 和 Mybatis )配置详解
使用 SSM ( Spring . SpringMVC 和 Mybatis )已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没 ...
- 数据结构Java实现02----线性表与顺序表
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android组件---四大布局的属性详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4372222.html Android常见布局有下面几种: LinearL ...
- ofbiz的部署及安装问题解决办法
ofbiz是apache下的顶级开源项目之一,非常强大说下正常流程及解决办法. 开发环境:本人开发环境是win7系统 准备: 1.如果使用的是git,从https://github.com/apach ...
- android app多渠道分发打包
1. 美团多渠道包的方法论 1) maven编译多次 2) apktool一次包,解开重新打 (个人倾向于这个) 3) http://tech.meituan.com/mt-apk-packagi ...
- Android 动态加载 (一) 态加载机制 案例一
在目前的软硬件环境下,Native App与Web App在用户体验上有着明显的优势,但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端,造成较差的用户体验,而这也恰恰是Web App的优势.本 ...
- U3D assetbundle打包
using UnityEngine; using System.Collections; using UnityEditor; //此脚本不一定要放于editor目录下,经测试,放于其它地方也可以 p ...
- JQuery 如何选择带有多个class的元素
Q: 比如下面代码需要选择同时带有这几个class的元素,怎么写? 1 <div class="modal fade in"></div> A: 1. 依次 ...