*[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 ...
随机推荐
- MVC下设置默认页为index.html
将RouteConfig代码修改为如下 public class RouteConfig { public static void RegisterRoutes(RouteCollection rou ...
- JS 日期工具类-基于yDate
源码下载 前言:最近在用到JS日期操作时,发现有一些不方便,于是搜素了一些网上的资料,基于一个开源工具类-yDate 进行了个性化定制,封装成了一个日期工具类工具函数大概介绍:1.普通的日期操作2. ...
- JavaScript高级程序设计(九):基本概念----语句的特殊点
一.Label语句.break/continue语句和for循环语句的结合使用: 1.Label语句可以在代码中添加标签,以便将来使用.语法: label:statment eg: start:f ...
- Jquery on 事件
$(document).on("click", 'a.AAA', function(){ var flag=$(this).attr('flag'); alert(flag); } ...
- 数据库E-R模型,数据字典
概述:实体-联系模型(简称E-R模型) 模型结构: E-R模型的构成成分是实体集.属性和联系集,其表示方法如下: (1) 实体集用矩形框表示,矩形框内写上实体名. (2) 实体的属性用椭圆框表示,框内 ...
- as3判断XML是否合法
XML是否合法 在我认为 XML的标签成对 并且根标签外边没有其他东西 以下是合法的 <?xml version="1.0" encoding="utf-8&quo ...
- IIS7 发现无法显示ewebeditor编辑器成空白
vs2003写的网站,很早了,编辑器用的是ewebeditor,每次更换程序编辑器都会出问题.今天记录一下. 内部老网站在Windows2003 iis6上运行的. 现在要迁移到2008上64位.08 ...
- dorado需要的包
创建dorado示例中心项目WEB-INF下的lib里的包有很多,包括连接数据库的完整的包,新建的项目,可以直接从这里面拷贝包. 当然如果需要连接mySql数据库,还需要手动导入mySql的包.
- 暑假集训(2)第五弹 ----- Who's in the Middle(poj2388)
G - Who's in the Middle Crawling in process... Crawling failed Time Limit:1000MS Memory Limit:32 ...
- mysql innodb 数据打捞(四)innodb 簇不连续页扫描提取(试验)
一,用winhex把正常页有意做成不连续的两部分,把后8K向后移动4K,中间隔开4K,启动第一次扫描; 扫描结果是,没有提取到有效页面,但在输出目录生成两个文件:upper.pages和upper.l ...