题目大意:
  一个机器人按照给定的一系列指令进行运动。
  总共有两种指令:
  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的更多相关文章

  1. 【AtCoder】ARC087

    C - Good Sequence 题解 用个map愉悦一下就好了 代码 #include <bits/stdc++.h> #define fi first #define se seco ...

  2. 四种比较简单的图像显著性区域特征提取方法原理及实现-----> AC/HC/LC/FT。

    laviewpbt  2014.8.4 编辑 Email:laviewpbt@sina.com   QQ:33184777 最近闲来蛋痛,看了一些显著性检测的文章,只是简单的看看,并没有深入的研究,以 ...

  3. Robot Framework用户手册 (版本:3.0)

    版权信息:诺基亚网络和解决中心 本翻译尊重原协议,仅用于个人学习使用 1.开始: 1.1 介绍: Robot Framework是一个基于Python的,为终端测试和验收驱动开发(ATDD)的可扩展的 ...

  4. selenium webdriver 右键另存为下载文件(结合robot and autoIt)

    首先感谢Lakshay Sharma 大神的指导 最近一直在研究selenium webdriver右键菜单,发现selenium webdriver 无法操作浏览器右键菜单,如图 如果我想右键另存为 ...

  5. RIDE -- Robot Framework setup

    RobotFramework 是一款基于python 的可以实现关键字驱动和数据驱动并能够生成比较漂亮的测试报告的一款测试框架 这里使用的环境是 python-2.7.10.amd64.msi RID ...

  6. [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 ...

  7. Robot Framework自动化测试 ---视频与教程免费分享

    当我第一次使用Robot Framework时,我是拒绝的.我跟老大说,我拒绝其实对于习惯了代码的自由,所以讨厌这种“填表格”式的脚本.老大说,Robot Framework使用简单,类库丰富,还可以 ...

  8. robot创建桌面图标(转载)

    桌面ride图标,安装之后会自动创建(偶尔也会创建失败),创建桌面图标方法如下: 1. 新建快捷方式 在桌面右击鼠标,弹出的菜单选择 新建-快捷方式 ,然后在"请键入对象"的位置输 ...

  9. Robot Framework 的安装和配置(转载)

    Robot Framework 的安装和配置 在使用 RF(Rebot framework)的时候需要 Python 或 Jython 环境,具体可根据自己的需求来确定.本文以在有 Python 的环 ...

随机推荐

  1. 7月18号day10总结

    今天学习过程和小结 今天学会了用git从GitHub上克隆代码然后打包成jar包,然后在idea程序中引入这个jar包的依赖来使用jar包中的程序. 通过这个中的网址: 在Git Bash Here中 ...

  2. Android推送使用--文章集锦

    Android之基于百度云推送IM Android实现推送方式解决方案 Android消息推送(一)--AndroidPn(XMPP协议)Demo版到正式上线 采用XMPP协议实现Android推送 ...

  3. HDU1878 欧拉回路---(并查集+图论性质)

    http://acm.hdu.edu.cn/showproblem.php?pid=1878 欧拉回路 Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  4. thinkpad x260 U盘进入

    主要有三个问题: 1.bios 不支持U盘启动 联想电脑bios设置u盘启动方法如下:1.打开联想笔记本电脑,在出现开机画面时按F2进入bios设置界面,使用左右方向键将光标移至security菜单, ...

  5. 【Foreign】石子游戏 [博弈论]

    石子游戏 Time Limit: 10 Sec  Memory Limit: 256 MB Description Input Output 输出T行,表示每组的答案. Sample Input 3 ...

  6. Kubernetes : 多节点 k8s 集群实践

    说明: 本文参考 『 Kubernetes 权威指南 』 第一章的案例. 需要说明的是, 这本书里有很多描述的东西和实践的案例不吻合. Kubernets 集群架构 架构图 Server List 节 ...

  7. keras_实现cnn_手写数字识别

    # conding:utf-8 import os os.environ[' import numpy as np from keras.models import Sequential from k ...

  8. 类的 propert,classmethod,ataticmethod 方法 与 多态

    一 .property 将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数 然后计算出来的,这种特性的使用方式遵循了统一访问的原则 egon. ...

  9. Django-views,用户认证,login_requierd()

    分别是认证,登入,注销的功能 authenticated():验证是否登录 user = authenticate(username='someone',password='somepassword' ...

  10. CF#328 (Div. 2) C(大数)

    C. The Big Race time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...