题目链接


(ozr attack)

考虑怎么暴力,就是先在所有非障碍格子上全放上机器人,然后枚举每一步,枚举每个机器人移动这一步,直到所有机器人都在出口位置。复杂度是\(O(nmk)\)的。

怎么优化呢,注意到每次移动都是所有机器人一起向同一个方向移动,而我们只关心每个位置上是否有机器人。

可以用bitset优化每次移动。把格子编好号后,向上移动就是整体右移\(m\)位,向左走就是整体右移一位...

还有个问题是,机器人不能往障碍上走。我们可以先把能走的机器人走过去,然后把会撞墙的机器人补回来。

复杂度\(O(\frac{nmk}{w})\)。


//934ms	0KB
#include <cstdio>
#include <bitset>
#include <cstring>
const int N=153; std::bitset<N*N> can,ban,now; int main()
{
static char s[100005];
int n,m,K,pos=0; scanf("%d%d%d",&n,&m,&K);
for(int i=1,now=0; i<=n; ++i)
{
scanf("%s",s+1);
for(int j=1; j<=m; ++j,++now)
{
s[j]=='#'?ban[now]=1:can[now]=1;
if(s[j]=='E') pos=now;
}
}
if(can.count()==1&&can[pos]==1) return putchar('0'),0;
now=can; scanf("%s",s+1);
for(int i=1,l=K; i<=l; ++i)
{
switch(s[i])
{
case 'U': now=(now>>m&can)|(now&(ban<<m)); break;
case 'D': now=(now<<m&can)|(now&(ban>>m)); break;
case 'L': now=(now>>1&can)|(now&(ban<<1)); break;
case 'R': now=(now<<1&can)|(now&(ban>>1)); break;
}
if(now.count()==1&&now[pos]==1) return printf("%d\n",i),0;
}
puts("-1"); return 0;
}

Codeforces.97D.Robot in Basement(bitset 模拟)的更多相关文章

  1. CodeForces 97D. Robot in Basement

    time limit per test 4 seconds memory limit per test 256 megabytes input standard input output standa ...

  2. cf97D. Robot in Basement(模拟 bitset)

    题意 题目链接 Sol 接下来我的实现方式和论文里不太一样 然后用bitset优化,上下走分别对应着右移/左移m位,左右走对应着右移/左移1位 我们可以直接预处理出能走的格子和不能走的格子,每次走的时 ...

  3. Codeforces 626A Robot Sequence(模拟)

    A. Robot Sequence time limit per test:2 seconds memory limit per test:256 megabytes input:standard i ...

  4. Codeforces 716B Complete the Word【模拟】 (Codeforces Round #372 (Div. 2))

    B. Complete the Word time limit per test 2 seconds memory limit per test 256 megabytes input standar ...

  5. codeforces 723B Text Document Analysis(字符串模拟,)

    题目链接:http://codeforces.com/problemset/problem/723/B 题目大意: 输入n,给出n个字符的字符串,字符串由 英文字母(大小写都包括). 下划线'_' . ...

  6. Codeforces Round #304 C(Div. 2)(模拟)

    题目链接: http://codeforces.com/problemset/problem/546/C 题意: 总共有n张牌,1手中有k1张分别为:x1, x2, x3, ..xk1,2手中有k2张 ...

  7. Codeforces 749C:Voting(暴力模拟)

    http://codeforces.com/problemset/problem/749/C 题意:有n个人投票,分为 D 和 R 两派,从1~n的顺序投票,轮到某人投票的时候,他可以将对方的一个人K ...

  8. Educational Codeforces Round 2 A. Extract Numbers 模拟题

    A. Extract Numbers Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/600/pr ...

  9. CodeForces 797C Minimal string:贪心+模拟

    题目链接:http://codeforces.com/problemset/problem/797/C 题意: 给你一个非空字符串s,空字符串t和u.有两种操作:(1)把s的首字符取出并添加到t的末尾 ...

随机推荐

  1. spring data jpa 全面解析(实践 + 源码分析)

    前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...

  2. linux下mysql源码安装

    参考链接:http://blog.csdn.net/zqtsx/article/details/9378703 下载mysql安装包, 不会下载点这里 地址:ftp://mirror.switch.c ...

  3. json数组

    <!DOCTYPE html><html><head> <meta charset="utf-8"> <title>js ...

  4. add web server(nginx)

    #!/bin/bash # # Web Server Install Script # Last Updated 2012.09.24 # ##### modify by WanJie 2012.09 ...

  5. python下载想听的有声书,让喜马拉雅收费,我是程序员!

    from urllib import parse,request import urllib header_dict = {'User-Agent': 'Mozilla/5.0 (Windows NT ...

  6. web应用启动后发现被自动访问

    为了找到原因,做了以下操作,发现是eclipse访问的,但是具体原因未知

  7. 重排DL

    题解: https://www.luogu.org/problemnew/show/T51442 从这题上还是学到不少东西.. 以前并没有写过ex-bsgs 正好拿这个复习中国剩余定理和bsgs了(我 ...

  8. yii2上传七牛图片(超详细)

    前期准备 1.在七牛注册账号https://portal.qiniu.com/signup/choice 2.创建空间https://portal.qiniu.com/bucket(记住存储空间名称和 ...

  9. java06作业归档

    动手动脑 阅读QiPan.java示例程序了解如何利用二维数组和循环语句绘制五子棋盘. package 归档作业6; import java.io.*; public class QIPAN { // ...

  10. Shell工具| 流程控制

    1. 流程控制 if 判断 ()[ 条件判断式 ],中括号和条件判断式之间必须有空格 ()if后要有空格 [kris@hadoop datas]$ vim if.sh #!/bin/bash -eq ...