[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 的环 ...
随机推荐
- POJ2396:Budget(带下界的网络流)
Budget Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 8946 Accepted: 3327 Special ...
- 一个IT中专生在深圳的9年辛酸经历
一个IT中专生在深圳的9年辛酸经历 想一想来到深圳已经近10年了,感概万千呐!从一个身无分文的中专职校计算机毕业出来后,竟然大胆的南下(之前可是连我们那地区之外都没去过),现在有供完的房子,温柔的妻子 ...
- 转:java 帐号激活与忘记密码 实例
原文链接:http://endual.iteye.com/blog/1613679 一.帐户激活 在 很多时候,在某些网站注册一个用户之后,网站会给这个用户注册时填写的email地址发送一封帐户激 ...
- Lesson 3
1.关于面向对象的三个重要属性 Encapsulation(封装):无法直接访问类的成员变量,而是通过一些get set方法,间接访问数据域: Polymorphism(多态):静态绑定,动态绑定, ...
- [POJ2406&POJ1961]用KMP解决字符串的循环问题两例
翻阅了一下网上资料,发现大部分都说这题是找规律...或是说YY出的一个算法..不会证明... 然后就脑补了一下证明 ~ 结论:对于一个字符串S[1..N],如果N mod (N-next[N])=0 ...
- Red-Black Tree
A red-black tree is a Binary Search Tree that satisfy the red-black tree properties: 1. Every node i ...
- mysql五-1:单表查询
一 介绍 本节内容: 查询语法 关键字的执行优先级 简单查询 单条件查询:WHERE 分组查询:GROUP BY HAVING 查询排序:ORDER BY 限制查询的记录数:LIMIT 使用聚合函数查 ...
- shell脚本复制文件夹内容到另外的文件夹,如果存在则自动备份
有时我们需要将一个文件夹覆盖到我们的工作目录,但需要自动备份已经存在的文件,一个一个去备份太麻烦了,全部备份又没有必要.shell脚本可以很好滴完成这个任务.原文链接http://back.zhizh ...
- Swift学习三
http://blog.csdn.net/kuloveyouwei/article/details/36005299 Swift 提供两种集合类型来存储集合,数组和字典.数组是一个同类型的序列化列表集 ...
- 使用socket获取html
import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) host = "www.baidu.com& ...