[ARC087D]FT Robot
题目大意:
一个机器人按照给定的一系列指令进行运动。
总共有两种指令:
T:向某个方向旋转90度。
F:向当前所朝的方向走一个单位长度。
一开始机器人站在原点,且朝向x的正半轴方向,问机器人是否可能会经过点(x,y)。
思路:
不难想到一个O(n^3)的DP。
考虑如何重新设计状态来优化到O(n^2).
显然,横向运动的过程和纵向运动的过程是独立的。
我们不妨分开考虑这两种情况。
我们可以对于给定的指令序列分组,使得每一组的指令都是若干个F加上一个T的形式(当然也可以没有F)。
显然,这时候对于每一组的指令,机器人的运动情况都是向当前方向前进若干步再转弯。
而如果我们对每一组指令进行编号,显然,机器人移动的方向与组的编号有关。
编号为奇数的在水平方向上移动,反之则在竖直方向上移动。
以水平方向为例,用f[i]表示是否可能走到横坐标为i的位置,d[j]表示第j组中F的个数,那么f[i]=f[i-d[j]]||f[i+d[j]]。
其中如果第一个指令就是F,就只能往右走而不能往左走,要特判一下。
最后就只需要分别判断一下x和y是否可以到达即可。
#include<cstdio>
#include<cctype>
#include<cstring>
inline int getint() {
register char ch;
register bool neg=false;
while(!isdigit(ch=getchar())) if(ch=='-') neg=true;
register int x=ch^'';
while(isdigit(ch=getchar())) x=(((x<<)+x)<<)+(ch^'');
return neg?-x:x;
}
const int N=,M=;
char s[N];
int op[N]={};
bool f[][M],tmp[M];
int main() {
scanf("%s",s);
const int x=getint(),y=getint();
op[]=s[]=='F';
for(register int i=;s[i];i++) {
if(s[i]=='T'&&s[i-]=='T') op[++op[]]=;
if(s[i]=='F') {
if(s[i-]=='T') op[]++;
op[op[]]++;
}
}
f[][N]=f[][N]=true;
for(register int i=;i<=op[];i++) {
memset(tmp,,sizeof tmp);
for(register int j=;j<M-op[i];j++) tmp[j+op[i]]|=f[i&][j];
if(i!=) for(register int j=op[i];j<M;j++) tmp[j-op[i]]|=f[i&][j];
memcpy(f[i&],tmp,sizeof tmp);
}
puts(f[][N+y]&&f[][N+x]?"Yes":"No");
return ;
}
[ARC087D]FT Robot的更多相关文章
- 【AtCoder】ARC087
C - Good Sequence 题解 用个map愉悦一下就好了 代码 #include <bits/stdc++.h> #define fi first #define se seco ...
- 四种比较简单的图像显著性区域特征提取方法原理及实现-----> AC/HC/LC/FT。
laviewpbt 2014.8.4 编辑 Email:laviewpbt@sina.com QQ:33184777 最近闲来蛋痛,看了一些显著性检测的文章,只是简单的看看,并没有深入的研究,以 ...
- Robot Framework用户手册 (版本:3.0)
版权信息:诺基亚网络和解决中心 本翻译尊重原协议,仅用于个人学习使用 1.开始: 1.1 介绍: Robot Framework是一个基于Python的,为终端测试和验收驱动开发(ATDD)的可扩展的 ...
- selenium webdriver 右键另存为下载文件(结合robot and autoIt)
首先感谢Lakshay Sharma 大神的指导 最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图 如果我想右键另存为 ...
- RIDE -- Robot Framework setup
RobotFramework 是一款基于python 的可以实现关键字驱动和数据驱动并能够生成比较漂亮的测试报告的一款测试框架 这里使用的环境是 python-2.7.10.amd64.msi RID ...
- [8.2] Robot in a Grid
Imagine a robot sitting on the upper left corner of grid with r rows and c columns. The robot can on ...
- Robot Framework自动化测试 ---视频与教程免费分享
当我第一次使用Robot Framework时,我是拒绝的.我跟老大说,我拒绝其实对于习惯了代码的自由,所以讨厌这种“填表格”式的脚本.老大说,Robot Framework使用简单,类库丰富,还可以 ...
- robot创建桌面图标(转载)
桌面ride图标,安装之后会自动创建(偶尔也会创建失败),创建桌面图标方法如下: 1. 新建快捷方式 在桌面右击鼠标,弹出的菜单选择 新建-快捷方式 ,然后在"请键入对象"的位置输 ...
- Robot Framework 的安装和配置(转载)
Robot Framework 的安装和配置 在使用 RF(Rebot framework)的时候需要 Python 或 Jython 环境,具体可根据自己的需求来确定.本文以在有 Python 的环 ...
随机推荐
- docker compose,link,Odoo
1.报错: /usr/bin/docker-current: Error response from daemon: driver failed programming external connec ...
- scrapy新版本特性
1:在spider中返回一个自定义的字典,老版本中需要先定义一个Item,填充后再返回一个对象 新版本中可以直接返回一个字典 2:Per-spider settings 为每个spider进行单独设 ...
- css做中划线与文字排版
html: <div class="spilt"> <span class="left"></span> < ...
- import as from import 区别
在python中import或者from…import是用来导入相应的模块.那每一种有什么具体的差别呢? 一.import 只有import,为最简单的引入对应的包.例如: import ...
- sql 批量更新表中多字段为不同的值
,),,),rand()) select newid() ,) update tablename , FB,)) , ), FC,)) , )
- easyui 在子tabs中打开新tabs(关于easyUI在子页面增加显示tabs的一个问题)
现在说的是在子页面点个按钮也能触发增加子页面的情况. 情景是,在父页面上有个div如: <div class="easyui-tabs" id="main" ...
- Java坦克大战 (七) 之图片版
本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...
- 【SQL】使用调用层接口
只记录C语言相关的,java相关的JDBC和PHP相关的都先跳过. C相关的也只是记录一下,这里面的语句我都不知道如何运行,在我的vs2010里面连头文件都找不到... 我觉得这里只是讲解了一下基本的 ...
- k8s创建资源的两种方式
命令 vs 配置文件 Kubernetes 支持两种方式创建资源: 1. 用 kubectl 命令直接创建 kubectl run nginx-deployment --image=nginx: -- ...
- crontab执行python报错原因总结
1.相对路径导致 2.环境变量问题,py脚本首行应指定python路径,不能用软链接 3.python3.3是默认utf-8,需要 &&脚本 最好使用crontab -e ...