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. 利用zookeeper生成唯一id

    package com.cxy.com.cxy.curator; import java.util.concurrent.ExecutorService; import java.util.concu ...

  2. 安装gitlab-runner

    # 下载 $sudo wget -O /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/lat ...

  3. 安装lombok

    1. lombok的jar包路径 wangfei@DESKTOP-8AT8HRO MINGW64 /d/gradle-3.4.1/caches/modules-2/files-2.1/org.proj ...

  4. java经典学习路线

    恩,做开发的工作已经三年多了,说起来实在是惭愧,自己的知识树还像一棵小草一样,工作中使用到了许多的知识和技术,不过系统性不够.根基不牢.并且不够深入!当然,慢慢的我也更加的清楚,我需要学习一些什么样的 ...

  5. bcb6重启应用程序

    在工程的cpp文件中WinMain还是得最后添加如下的代码(其中g_blsRunAgain为bool类型的全局变量,在需求重启的时候先将g_blsRunAgain置为true,再将程序关闭,之后就会重 ...

  6. springmvc 4.x 转json

    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter&q ...

  7. 毕业设计 python opencv实现车牌识别 矩形矫正

    主要代码参考https://blog.csdn.net/wzh191920/article/details/79589506 GitHub:https://github.com/yinghualuow ...

  8. day29 进程

    1..操作系统知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的 ...

  9. pm2 启动后台 node js

    1,安装node js 参看:https://www.cnblogs.com/wf-l5201314/p/9229974.html 2,pm2安装(安装环境linux / os) 命令:npm ins ...

  10. 初识 iOS 自动化测试框架 WebDriverAgent

    微信跳一跳最近很火,外挂代练什么的也越来越多.作为一只程序猿,对外挂的原理产生了强烈的好奇心,于是埋头研究了一阶段,注意到了 WebDriverAgent 这套 Facebook 出品的自动化测试框架 ...