#搜索,计算几何#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里面测试相关的工具和框架太多了.你应该从以下几个方面入手. 编程语言的选择 如果你要学习的 ...
随机推荐
- 【手写信息搜集工具】ThunderSearch 闪电搜索器
ThunderSearch 闪电搜索器 项目地址:github Windows打包版 利用ZoomEye的官方api,结合开发文档,做了这么一个GUI界面的搜索器.目前支持查询host_search ...
- collection.abc模块下的抽象基类UML类图说明
说明 Iterable.Container和Sized 每个容器都应该继承这三个抽象基类,或者实现兼容的协议.Iterable通过__iter__方法支持迭代, Container通过__contai ...
- Navicat安装包和激活工具
链接:https://pan.baidu.com/s/11YuOKdgGakt3E8CL80aA2g 提取码:h4f3
- 教程|在矩池云使用 Stable Diffusion web UI v1.5 模型和 ControlNet 插件
今天给大家介绍下如何在矩池云使用 Stable Diffusion web UI v1.5 模型和 Stable Diffusion ControlNet 插件. 租用机器 租用机器需要选择内存大于8 ...
- elasticsearch 查询索引和清理索引命令
查询 curl --silent 'http://127.0.0.1:9200/_cat/indices' 删除 curl -X DELETE "localhost:9200/wifiloc ...
- 【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
问题描述 在Azure App Service for Windows的环境中,部署.NET应用,其中使用了 SAP NetWeaver RFC函数 (需要加载 sapnwrfc.dll).详细的错误 ...
- 1、dubbo的简介
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候 ...
- 如何获取拼多多推流码并使用OBS进行直播-疯狂URL
简介 拼多多直播在PC端可以用多多视频|多多直播端进行开播,它的功能类似于常见的抖音直播助手和快手直播伴侣等等客户端.此教程测试时间 2023-7-12,第三方随时可能会升级,无法保证时效,建议不要升 ...
- RocketMQ为什么这么快?我从源码中扒出了10大原因!
大家好,我是三友~~ RocketMQ作为阿里开源的消息中间件,深受广大开发者的喜爱 而这其中一个很重要原因就是,它处理消息和拉取消息的速度非常快 那么,问题来了,RocketMQ为什么这么快呢? 接 ...
- debian在使用Thunderbird时英文改为中文
sudo apt-get install thunder* 随后重启应用!