#搜索,计算几何#JZOJ 4016 圈地为王
题目
在\(n\)行\(m\)列的网格中,你要圈一些地。
你从左上角出发,最后返回左上角,路径内部的区域视为被你圈住。 你不可以进入网格内部, 只能在边上行走。 你的路径不能在左上角以外自交, 但是边足够宽, 你可以重复经过而不自交。
网格中有一些格子对你很重要,你要尽量圈住它;而另一些格子对你有坏处,你不能圈住它。
求圈住\(i\)个重要的格子的最小路径长度。(\(n,m\leq 50,Special Block\leq 10\))
分析
自交除了左上角完全可以被等价的方案代替,所以可以忽略它,接着如何保证好的被圈,坏的不被圈,
把一个点向任意方向引一条射线,如果这条线穿过奇数次多边形,那么点在多边形内,否则点在多边形外,
所以可以判断竖着的边(横着的边也行),然后记录选取的状态跑SPFA,再深搜选取
代码
#include <cstdio>
#include <queue>
#include <cstring>
#define rr register
using namespace std;
struct rec{int x,y,S;}; queue<rec>q;
const int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
int spx[11],spy[11],n,m,cnt,po[11],dis[51][51][1024],ans[11];
bool v[51][51][1024]; char a[51][51];
inline signed min(int a,int b){return a<b?a:b;}
inline signed Turn_S(int x,int y,int SS){
for (rr int i=0;i<cnt;++i)
if (spx[i]>x&&spy[i]==y) SS^=po[i];
return SS;
}
inline void dfs(int SS,int dep,int now){
ans[now]=min(ans[now],dis[0][0][SS]);
if (dep==cnt) return;
if (a[spx[dep]][spy[dep]]=='I') dfs(SS|po[dep],dep+1,now+1);
dfs(SS,dep+1,now);
}
signed main(){
po[0]=1; rr char c;
for (rr int i=1;i<10;++i)
po[i]=po[i-1]+po[i-1];
for (n=1;(c=getchar())!=EOF;++n){
for (m=0;c=='.'||c=='I'||c=='X';c=getchar()){
a[n][++m]=c;
if (c!='.') spx[cnt]=n,spy[cnt]=m,++cnt;
}
}
memset(dis,42,sizeof(dis));
dis[0][0][0]=0,--n,v[0][0][0]=1,q.push((rec){0,0,0});
while (q.size()){
rr rec t=q.front(); rr int now=dis[t.x][t.y][t.S]; q.pop();
for (rr int k=0;k<4;++k){
rr int zx=t.x+dx[k],zy=t.y+dy[k],SS=t.S;
if (zx<0||zy<0||zx>n||zy>m) continue;
if (k&1) SS=Turn_S(t.x,k==3?t.y:zy,SS);
if (dis[zx][zy][SS]>now+1){
dis[zx][zy][SS]=now+1;
if (!v[zx][zy][SS]){
v[zx][zy][SS]=1;
q.push((rec){zx,zy,SS});
}
}
}
v[t.x][t.y][t.S]=0;
}
memset(ans,42,sizeof(ans));
dfs(0,0,0);
for (rr int i=1;i<=cnt;++i)
if (ans[i]<4e5) printf("%d\n",ans[i]);
return 0;
}
#搜索,计算几何#JZOJ 4016 圈地为王的更多相关文章
- MapReduce明星搜索指数统计,找出人气王
我们继续通过项目强化掌握Combiner和Partitioner优化Hadoop性能 1.项目介绍 本项目我们使用明星搜索指数数据,分别统计出搜索指数最高的男明星和女明星. 2.数据集 3.分析 基于 ...
- Hadoop实战:明星搜索指数统计,找出人气王
项目介绍 本项目我们使用明星搜索指数数据,分别统计出搜索指数最高的男明星和女明星. 数据集 明星搜索指数数据集,如下图所示.猛戳此链接下载数据集 思路分析 基于项目的需求,我们通过以下几步完成: 1. ...
- UMHexagonS搜索过程
通过相邻块的预测得到mvp后,会以mvp为基础搜索最佳的匹配块,UMHexagonS就是h.264中用的一种搜索算法. UMHexagonS是一种整像素搜索算法,也就是搜索过程中,参考图像一直都是原来 ...
- pick王菊?作为“菊外人”的程序员能做点什么?
转载:https://mp.weixin.qq.com/s/s1cb9Ij6ouTYYCZovLhXTA 最近,想必大家的朋友圈都被“王菊”占领了,打开朋友圈到处可以见到“pick王菊”.“陶渊明”. ...
- 什么?女神发了朋友圈,快来围观之Java设计模式:观察者模式
目录 观察者模式 示例 定义 设计原则 意图 主要解决问题 何时使用 优缺点 女神和追求者的故事 Java中的实现 观察者模式 示例 微信公众号,关注就可以收到推送的消息,取消关注就不会收到 定义 定 ...
- 北大 ACM 分类 汇总
1.搜索 //回溯 2.DP(动态规划) 3.贪心 北大ACM题分类2009-01-27 1 4.图论 //Dijkstra.最小生成树.网络流 5.数论 //解模线性方程 6.计算几何 //凸壳.同 ...
- 打败Google的灵童今在何方?
微软和雅虎宣布在搜索和广告上10年合作,这事儿不知是不是前不久虚惊一场的微软收购雅虎案的好戏重演之序幕. 从表面上看,这次的合作改变不了搜索和广告目前的世界格局,也构不成对Google的致命威胁,反倒 ...
- Nutch+Lucene搜索引擎开发实践
网络拓扑 图 1 网络拓扑图 安装Java JDK 首先查看系统是否已经安装了其它版本号的JDK,假设有,先要把其它版本号的JDK卸载. 用root用户登录系统. # rpm-qa|grep gcj ...
- 微信小程序外包 就找北京动软 专业承接微信小程序定制
很多人问为什么要开发微信小程序,微信小程序的“入口”在哪儿? 1.只有访问过的小程序,才会出现所谓的「入口」. 所有访问过得小程序都可以从微信首屏下面的「发现」点过去.(必须是最新版微信) 这个所谓的 ...
- Android自动化测试学习路线
最近在整理Android自动化测试的相关资料,大体上把一些知识点梳理了,这里做一个简单的分享! Android里面测试相关的工具和框架太多了.你应该从以下几个方面入手. 编程语言的选择 如果你要学习的 ...
随机推荐
- win32 - 关于GDI的RGB的数据分析
此文章为小结,仅供参考. 第一种情况,从桌面DC获取RGBA的数据. 32位 HDC hdc, hdcTemp; RECT rect; BYTE* bitPointer; int x, y; int ...
- 【LeetCode动态规划#09】完全背包问题实战,其二(零钱兑换和完全平方数--求物品放入个数)
零钱兑换 力扣题目链接(opens new window) 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能 ...
- 一分钟带你了解mySql执行SQL的内部原理
1.把MySQL当个黑盒子一样执行SQL语句 我们知道执行了insert语句之后,在表里会多出来一条数据:执行了update语句之后,会对表里的数据进行更改:执行了delete语句之后,会把表里的一条 ...
- NSSRound#17 Basic web
NSSRound#17 Basic web 真签到 审题 一个登录界面 看到页面名字Robots? 转到robots.txt 看到加密 知识点: 加密解密. 解题 hint解密,使用Hex加密方式解出 ...
- 【Azure 应用服务】Azure Function在执行Function的时候,如果失败了,是否可以重试呢?
问题描述 Azure Function在执行Function的时候,如果失败了,是否可以重试呢? 问题解答 Function app默认是不开启重试的,但是可以修改 host.json 文件来定义重试 ...
- 【Azure 媒体服务】记录一个简单的媒体视频上传到Media Service无法播放问题
问题描述 从本地上传到Azure Media Service Portal的视频,并且新增定位符后,无法播放.但是上传的其他视频是可以的.疑惑中!! 问题自查 自查发现,是视频的文件名中有个特殊符号. ...
- Tomcat 系列
Tomcat 系列 目录 Tomcat 系列 一. 基本概念 1.1 java jdk 概念 1.2 jsp.servlet是什么 1.3 web服务器.web容器.应用程序服务器 1.4 tomca ...
- Lock wait timeout exceeded; try restarting transaction-Mysql报错
一.问题由来 现在在做一个小程序的后台,使用Java写的,数据库使用的Mysql,之前一直调试的时候都好好的,今天在调试的时候突然就报一个错: ### Error updating database. ...
- vscode 格式化空格,constructor 构造函数的空格 会有问题,找到一个配置文件好使
Ctrl+Shift+P "javascript.format.enable": false, "javascript.format.insertSpaceAfterCo ...
- Java求解汉诺塔
汉诺塔 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗 ...