*[topcoder]HexagonalBoard
http://community.topcoder.com/stat?c=problem_statement&pm=12784
真心觉得tc的div1 250不少好题,对我来说比较适合。这道题一开始拿到是个棋盘,觉得像是DP,然后觉得有些不同,因为棋盘不是满的,二来这可能是个判定问题,就是2种颜色够不够,3中颜色够不够。然后想到DFS/BFS之类。再后来想到贪心,就是按顺序染色每个点,都用可以的最小颜色去染,觉得可行。写代码小错不断,最终pass。
#include <vector>
#include <string>
using namespace std; class HexagonalBoard {
public:
int minColors(vector <string> board);
private:
bool hitTest(vector <string> &board, int i, int j);
}; bool HexagonalBoard::hitTest(vector <string> &board, int i, int j) {
int m = board.size();
if (i < 0 || j < 0 || i >= m || j >= m) return false;
if (board[i][j] != 'X') return false;
return true;
} int HexagonalBoard::minColors(vector <string> board) {
int m = board.size();
vector<vector<int> > color(m);
for (int i = 0; i < m; i++) {
color[i].resize(m, 0);
}
int count = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
if (!hitTest(board, i, j))
continue;
vector<int> color_map(4, 0);
if (hitTest(board, i-1, j)) color_map[color[i-1][j]] = 1;
if (hitTest(board, i-1, j+1)) color_map[color[i-1][j+1]] = 1;
if (hitTest(board, i, j-1)) color_map[color[i][j-1]] = 1;
for (int k = 0; k < 4; k++) {
if (color_map[k] == 0) {
color[i][j] = k;
count = max(count, k+1);
break;
}
}
}
}
return count;
};
标程首先用理论证明最多3种颜色,因为0种和1种颜色都是显而易见的,那么就看是否可以两种颜色。这个判定其实就是二分图的判定,判断二分图方法:用染色法,把图中的点染成黑色和白色。首先取一个点染成白色,然后将其相邻的点染成黑色,如果发现有相邻且同色的点,那么就退出,可知这个图并非二分图(一次bfs,O(n))。
*[topcoder]HexagonalBoard的更多相关文章
- TopCoder kawigiEdit插件配置
kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...
- 记第一次TopCoder, 练习SRM 583 div2 250
今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...
- TopCoder比赛总结表
TopCoder 250 500 ...
- Topcoder几例C++字符串应用
本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...
- TopCoder
在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...
- TopCoder SRM 596 DIV 1 250
body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...
- 求拓扑排序的数量,例题 topcoder srm 654 div2 500
周赛时遇到的一道比较有意思的题目: Problem Statement There are N rooms in Maki's new house. The rooms are number ...
- TopCoder SRM 590
第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement Fox Ciel is going to play Gomoku with her friend ...
- Topcoder Arena插件配置和训练指南
一. Arena插件配置 1. 下载Arena 指针:http://community.topcoder.com/tc?module=MyHome 左边Competitions->Algorit ...
随机推荐
- java和html的区别
Java 不是一门程序语言,它是一个平台,也可以说是一门技术. Java 包括 1.Java 程式语言 一个类似 C++ 或 Smalltalk 的物件导向程式语言.学习 Java 程式语言类似学人类 ...
- Apache服务
Apache服务的安装: Apache服务程序的软件包名称是:httpd 安装方法: rpm软件包安装.源码编译安装.yum安装 yum install httpd 安装完成后启动: revice h ...
- leetcode Largest Rectangle in Histogram 单调栈
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4052343.html 题目链接 leetcode Largest Rectangle in ...
- Less使用——让老司机带你飞
为什么我要使用Less less的作为编写css的工具插件,省时.方便.检测,具体的安装,请参考我的一篇文章<sublime text3 个人使用心得>,里面我讲解了安装方法,使用webs ...
- C# 异步下载文件
在C#当中,利用WebClient这个核心类,可以轻易的打造一个下载器.但是这里想要强调的是,我们用的是异步操作.所谓异步,是相对于同步的概念而言的.比如Web中的Ajax就是基于异步的.它能够提供良 ...
- DataNavigator之分页
前言 做客户端也有两个月了,先前做列表都没有分页,可能考虑数据也不是很多,昨天做了一个页面,考虑到了数据的问题,所以改为分页查询.因为也是第一次用dev,用哪个控件分页呢,还是要去搜一下,得出的事Da ...
- Sublime Text 中使用Git插件连接GitHub
sublime Text的另一个强大之处在于它提供了非常丰富的插件,可以帮助程序员来适合大多数语言的开发.这些插件通过它自己的Package Controll(包管理)组件来安装,非常方便.一般常用的 ...
- mac下如何查看指定端口被谁占用并且杀死该进程
在本地部署 Web 应用时我有遇到过某网络端口已经被其他程序占用的情况,这时候就需要先退出占用该端口的进程,我们可以通过“终端”来实现结束占用某特定端口的进程 1.打开终端,使用如下命令: lsof ...
- 盗链网易163、腾讯QQ、新浪sina、百度Baidu的图片之PHP独立版
网易相册频道,网易相册确实是一个高质量图片的地方,而且免费,唯一缺点是很多加了水印,但这个不重要了,无意间发现网易163相册频道的图片是防止盗链的,于是便自己写了一个小程序来突破这个. 本盗链图片最新 ...
- 【8】了解Bootstrap栅格系统基础案例(3)
这次我们来说下列偏移: 列偏移就是使用 .col-md-offset-* 类可以将列向右侧偏移.这些类实际是通过使用 * 选择器为当前元素增加了左侧的边距(margin).例如,.col-md-off ...