题意:

按照给出的字符串的方向走后,最终可能处于多少个位置。

分析:

可以发现,每走一步就是对当前所有可能的位置统一进行一次移动,遇到障碍或超出边界就舍弃这个位置a。
如果我们给这个矩阵的每个位置附上一个编号,那么我们发现:上下左右移动一格等价于编号+1、-1、+C、-C。
所以,我们不难想到将矩阵表示为一个二进制的01串,如果当前可能到达这个位置,那么该处为1,否则为零。
一次移动等价于二进制的左移右移,遇到问号相当于将上下左右移动都做一遍的结果或起来;
遇到障碍或超出边界舍弃这个位置就相当于:这个二进制数对所有合法的位置&1,对所有非法的位置&0。
R*C<=2500,所以我们可以用bitset来实现这个操作,bitset的count()函数会返回二进制中1的个数。

一个实现上的细节:左右移动一格后可能会移到上一行的末尾和下一行的开头位置,为了避免这种情况,我们需要在矩阵边界处补上两列非法位置。

详见代码:

#include<cstdio>
#include<bitset>
using namespace std;
#define MAXN 5010
bitset<251000>a,s;
char t[MAXN];
int n,m,K;
int main()
{freopen("nautilus.in","r",stdin);freopen("nautilus.out","w",stdout);scanf("%d%d%d",&n,&m,&K);m+=2;for(int i=0;i<n;i++){scanf("%s",t+1);for(int j=0;j<m;j++)if(t[j]=='.') s[i*m+j]=1;}a=s;scanf("%s",t);for(int i=0;i<K;i++){if(t[i]=='?') a=((a>>1)|(a<<1)|(a>>m)|(a<<m))&s;else if(t[i]=='N') a=(a>>m)&s;else if(t[i]=='S') a=(a<<m)&s;else if(t[i]=='W') a=(a>>1)&s;else if(t[i]=='E') a=(a<<1)&s;}printf("%d\n",(int)a.count());
}

BOI Day1 nautilus 题解相关推荐

  1. 【FJWC】day1简要题解

    题面 fc B I T BIT BIT维护前缀 m a x max max. 复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn) copy n = 1 n=1 n=1直接建 ...

  2. NOI2018 Day1 归程(Kruskal重构树)

    目录 NOI2018 Day1 return 题解 AC代码: NOI2018 Day1 return 题解 作为NOI Day1 的T1,这道题目还是比较清真的(虽然自己在同步赛的时候只打了70分的 ...

  3. NOI2022联合省选 题解

    NOI2022联合省选 题解 day1的题解咕咕咕了,有空再写吧(好吧,看到这么长的题面+大模拟就没有写题解的欲望了-- 注:非官方题解,不保证绝对正确,做法不一定是官方做法 注2:代码请见这篇blo ...

  4. [BZOJ 1834] [ZJOI2010]network 网络扩容

    1834: [ZJOI2010]network 网络扩容 Time Limit: 3 SecMemory Limit: 64 MB Description 给定一张有向图,每条边都有一个容量C和一个扩 ...

  5. NOIP 2017 Day1 T2 时间复杂度 complexity - 模拟题 题解

    作者@豪哒哒哒HaoDaDaDa 转载自简书@豪哒哒哒HaoDaDaDa-简书-NOIP 2017 Day1 T2 时间复杂度 (有一个月没有写简书了-) (这次终于开始拿Markdown写了,富文本 ...

  6. Noip 2016 Day1 题解

    老师让我们刷历年真题, 然后漫不经心的说了一句:"你们就先做做noip2016 day1 吧" ...... 我还能说什么,,,,,老师你这是明摆着伤害我们啊2333333333 ...

  7. LeetCode题解 Day1数组的遍历

    题目编号:485.495.414.628 485 最大连续1的个数 思路:刚开始的想法是计算当前连续1的个数,然后更新最大连续1的个数,具体的实现,就是在当前数组值为1时,计数且更新最大个数,如果当前 ...

  8. 攻防世界PWN之boi题解

    Boi 首先,检查一下程序的保护机制 然后,我们用IDA分析一下 看似很复杂,我们发现这是一个服务器程序,并且一开始要发送特殊指令,才能显示出菜单 套接字初始化,绑定了本地端口0x539也就是1337 ...

  9. 【算法题解】 Day1 前缀和

    ⭐ 算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,以实战习题的形式理解算法,使用算法.  

最新文章

  1. ​浅谈Asp.net的sessionState
  2. 简单分析一下socket中的bind
  3. Exp8 web基础 20154301仉鑫烨
  4. Java 运算符、表达式、语句
  5. JS实例:网页上图片延迟加载的JS代码
  6. js判断字符串中某个字母出现次数最多
  7. 员工入职性格测试软件,新员工入职性格测试
  8. java环境变量配置方法
  9. 12. 打印1到最大的n位数(C++版本)
  10. CBMVC For Titanium Alloy 发布!
  11. Luogu2617 Dynamic Rankings
  12. android studio 创建项目失败原因Failed to create
  13. mysql文本类型_mysql里存大量文本的数据类型是text吗?请详细说明一下
  14. SVG 研究之路 - 再談 defs
  15. Seafile私有云盘搭建详解
  16. 基于javaEE的超市库存管理系统
  17. 转载关于后端开发需要学习的内容
  18. 李斌转让5000万股私人持有股份 完成蔚来用户信托设立
  19. memcpy()详解
  20. J-Link下载失败解决办法

热门文章

  1. 【Linux】vmware命令模式切换桌面模式
  2. 干翻一切的王者语言到底是谁?
  3. 关于《Windows程序设计(第2版)王艳平 张铮编著》第3章设计TLS里的一个问题
  4. 分析‖为什么越来越多厂商开始发力VR一体机?
  5. 买房日照采光计算分析实战攻略
  6. python怎么找出列表中的重复数据_python – 如何在列表中找到重复项并使用它......
  7. 视频教程-清华-尹成老师-java基础-Day18-Java
  8. 教师资格证科目二主观题汇总
  9. 德国访问学者申请签证事宜
  10. 第五人格服务器维修到几点,第五人格1月10日更新维护到几点 第五人格1月10日更新公告...