http://community.topcoder.com/stat?c=problem_statement&pm=13628&rd=16278

标程是BFS,我用DFS,都可解。

这里复杂的把pair写了hash函数,其实直接用个矩阵来存bool就可以了。

#include <vector>
#include <algorithm>
#include <unordered_set>
#include <utility> using namespace std; struct pairhash {
public:
template <typename T, typename U>
std::size_t operator()(const std::pair<T, U> &x) const
{
return std::hash<T>()(x.first) * 37 ^ std::hash<U>()(x.second);
}
}; class TheGridDivTwo {
public:
unordered_set<pair<int, int>, pairhash> visited;
unordered_set<pair<int, int>, pairhash> block; int find(vector <int> x, vector <int> y, int k) {
for (int i = 0; i < x.size(); i++) {
block.insert(make_pair(x[i], y[i]));
}
int result = 0;
pair<int, int> start = make_pair(0, 0);
findRe(result, start, k, 0);
return result;
} void findRe(int &result, pair<int, int> &p, int k, int step) {
visited.insert(p);
if (step == k) {
result = max(result, p.first);
} else {
int dx[4] = {1, 0, 0, -1};
int dy[4] = {0, 1, -1, 0};
for (int i = 0; i < 4; i++) {
pair<int, int> tmp = make_pair(p.first + dx[i], p.second + dy[i]);
if (tmp.first + k - step > result && valid(tmp)) {
findRe(result, tmp, k, step + 1);
}
}
}
visited.erase(p);
} bool valid(pair<int, int> &p) {
if (block.find(p) != block.end() || visited.find(p) != visited.end()) {
return false;
}
return true;
} };

  

[topcoder]TheGridDivTwo的更多相关文章

  1. TopCoder kawigiEdit插件配置

    kawigiEdit插件可以提高 TopCoder编译,提交效率,可以管理保存每次SRM的代码. kawigiEdit下载地址:http://code.google.com/p/kawigiedit/ ...

  2. 记第一次TopCoder, 练习SRM 583 div2 250

    今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...

  3. TopCoder比赛总结表

    TopCoder                        250                              500                                 ...

  4. Topcoder几例C++字符串应用

    本文写于9月初,是利用Topcoder准备应聘时的机试环节临时补习的C++的一部分内容.签约之后,没有再进行练习,此文暂告一段落. 换句话说,就是本文太监了,一直做草稿看着别扭,删掉又觉得可惜,索性发 ...

  5. TopCoder

    在TopCoder下载好luncher,网址:https://www.topcoder.com/community/competitive%20programming/ 选择launch web ar ...

  6. TopCoder SRM 596 DIV 1 250

    body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...

  7. 求拓扑排序的数量,例题 topcoder srm 654 div2 500

    周赛时遇到的一道比较有意思的题目: Problem Statement      There are N rooms in Maki's new house. The rooms are number ...

  8. TopCoder SRM 590

     第一次做TC,不太习惯,各种调试,只做了一题...... Problem Statement     Fox Ciel is going to play Gomoku with her friend ...

  9. Topcoder Arena插件配置和训练指南

    一. Arena插件配置 1. 下载Arena 指针:http://community.topcoder.com/tc?module=MyHome 左边Competitions->Algorit ...

随机推荐

  1. (16)break和continue

    #(1)这里顺带说下pass # pass 过 的意思,防止代码报错,就是个占位的, if True: # 不允许代码块里面的内容为空,用pass占位 pass #(2)break (只能用在循环当中 ...

  2. 封装下Excel导出

    1. 使用方法 1.1 对象使用注解 @ExcelColumn(name = "页面1",freeze = "0,1,1,2",autoWidth=true) ...

  3. POJ1049 Microprocessor Simulation

    题目来源:http://poj.org/problem?id=1049 题目大意: 一种小型的微处理器有以下特性: 1. 每个字长4bit. 2. 地址用2个字进行编码.先高位字后低位字,即高位字大的 ...

  4. maven 子父工程。。。

    子工程module 父工程 主要是注意路径问题..否则会报错---

  5. windows_study_2

    描述:如何确定像%ProgramFiles%这样格式的目录的具体位置? 解决:运行——cmd——echo %ProgramFiles%——回车——界面就显示出目录位置了.

  6. java从笨鸟到菜鸟

    链接别人的笔记 http://www.cnblogs.com/cugwx/p/3536840.html

  7. python练习六十二:文件处理,往文件中所有添加指定的前缀

    往文件中所有添加指定的前缀 方法一:open方法 f_r = open('text.txt') f_w = open('text_new.txt','w+') i = 0 while True: i ...

  8. my16_sql_thread执行慢导致主从延迟高的一个情景

    现象:从库延迟高,查看slave status发现sql_thread执行语句的速度比主库慢,这样的延迟会一直高下去,下面是排查的一些过程1. 检查了从库的配置,磁盘的写入速度的确没有主库高2. io ...

  9. my14_mysql指定时间恢复之模拟从库

    场景 *********************************线上库数据误删除,存在几天前的一份全备数据,现需要恢复这些误删除的数据本例方案:在另外一台服务器上,恢复全备,搭建binlog ...

  10. Vue 参数传递及刷新后依旧存在

    获取参数方式有两种: 1.params2.query 第一种方式: params this.$router.push({name:'Hello',params:{name:'zs',age:'22'} ...