A. Ciel and Robot
time limit per test

1 second

memory limit per test

256 megabytes

input

standard input

output

standard output

Fox Ciel has a robot on a 2D plane. Initially it is located in (0, 0). Fox Ciel code a command to it. The command was represented by strings. Each character of s is one move operation. There are four move operations at all:

  • 'U': go up, (x, y) → (x, y+1);
  • 'D': go down, (x, y) → (x, y-1);
  • 'L': go left, (x, y) → (x-1, y);
  • 'R': go right, (x, y) → (x+1, y).

The robot will do the operations in s from left to right, and repeat it infinite times. Help Fox Ciel to determine if after some steps the robot will located in (a,b).

Input

The first line contains two integers a and b, (-109≤a,b≤109). The second line contains a string s (1≤|s|≤100, s only contains characters 'U', 'D', 'L', 'R') — the command.

Output

Print "Yes" if the robot will be located at (a,b), and "No" otherwise.

Sample test(s)
input

2 2
RU

output

Yes

input

1 2
RU

output

No

input

-1 1000000000
LRRLU

output

Yes

input

0 0
D

output

Yes

Note

In the first and second test case, command string is "RU", so the robot will go right, then go up, then right, and then up and so on.

The locations of its moves are (0, 0) → (1, 0) → (1, 1) → (2, 1) → (2, 2) → ...

So it can reach (2, 2) but not (1, 2).

官方题解:

322C - Ciel and Robot 321A - Ciel and Robot

Note that after Ciel execute string s, it will moves (dx, dy).

And for each repeat, it will alway moves (dx, dy).

So the total movement will be k * (dx, dy) + (dx[p], dy[p]) which (dx[p], dy[p]) denotes the movement after execute first p characters.

We can enumerate p since (0 <= p < |s| <= 100), and check if there are such k exists.

Note that there are some tricks:

We can divide dx or dy directly because they both can become zero.

Another trick is that k must be non-negative.

Many people failed on this test case (which no included in the pretest):

-1 -1

UR

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int dx[111],dy[111];
int ta,tb;
char str[111];
int main()
{
    cin>>ta>>tb;
    cin>>str;
    memset(dx,0,sizeof(dx));
    memset(dy,0,sizeof(dy));
    int len=strlen(str);
    for(int i=0;i<len;i++)
    {
        if(str=='U')
        {
            dy[i+1]=dy+1;
            dx[i+1]=dx;
        }
        else if(str=='D')
        {
            dy[i+1]=dy-1;
            dx[i+1]=dx;
        }
        else if(str=='L')
        {
            dx[i+1]=dx-1;
            dy[i+1]=dy;
        }
        else if(str=='R')
        {
            dx[i+1]=dx+1;
            dy[i+1]=dy;
        }
    }
/*
    for(int i=0;i<=len;i++)
    {
        cout<<dx<<" and "<<dy<<endl;
    }
*/
    int ddx=dx[len],ddy=dy[len];
    int OK=0;
    if(ta==0&&tb==0) OK=1;
    if(!OK)
    for(int i=1;i<=len;i++)
    {
        if(ta==dx&&tb==dy)
        {
            OK=1;
            break;
        }
    }
    if(!OK)
    for(int i=0;i<len;i++)
    {
        int kx=ta-dx;
        int ky=tb-dy;
        if(ddx==0&&ddy==0)
        {
            if(kx==0&&ky==0)
            {
                OK=1;break;
            }
        }
        else if(ddx==0&&ddy!=0)
        {
            if(kx==0)
            {
                if(ky%ddy==0)
                {
                    if(ky/ddy>=0)
                    {
                        OK=1;
                        break;
                    }
                }
            }
        }
        else if(ddy==0&&ddx!=0)
        {
            if(ky==0)
            {
                if(kx%ddx==0)
                {
                    if(kx/ddx>=0)
                    {
                        OK=1;
                        break;
                    }
                }
            }
        }
        else if(ddx!=0&&ddy!=0)
        {
            if(kx%ddx==0&&ky%ddy==0)
            {
                int t1=kx/ddx;
                int t2=ky/ddy;
                if(t1==t2)
                {
                    if(t1>=0)
                    {
                        OK=1;
                        break;
                    }
                }
            }
        }
    }
    if(OK==1)
    {
        puts("Yes");
    }
    else puts("No");
    return 0;
}

CodeForces 321A的更多相关文章

  1. CodeForces 321A Ciel and Robot(数学模拟)

    题目链接:http://codeforces.com/problemset/problem/321/A 题意:在一个二维平面中,開始时在(0,0)点,目标点是(a.b),问能不能通过反复操作题目中的指 ...

  2. Codeforces Round 190 div.2 322C 321A Ciel and Robot

    唔...这题是数学题. 比赛时做出来,但题意理解错了,以为只要判断那点是不是在线上就行了,发现过不了样例就没提交. 思路:记录每一步的偏移,假设那点是在路径上的某步,然后回推出那一个周期的第一步,判断 ...

  3. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  4. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  5. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  6. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  7. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  8. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  9. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

随机推荐

  1. 【转】代码编辑器(一)-TSynCompletionProposal用法

    注意,本系列均转载自http://blog.163.com/zom1995@126/ 网上有人给我一个SynEdit这个东西,因为我很喜欢自己编个代码编辑器,但要是用Delphi直接弄的,就我现在这样 ...

  2. VMT & DMT

    虚拟方法表和动态方法表 虚拟方法表VMT: 一个虚拟方法表从指针所指地址的负偏移.76 处开始,长度动态分配(由虚拟方法的个数确定).虚拟方法表被分为很多小段,每段占4 个字节,也就是众多指针.每个指 ...

  3. mvc url路由参数的加密和解密

    查看某个信息的时候一般会在url上加上该信息在数据库中对应的主键id(而且一般是自增的) url是这样子的 xxxDetail/1 , 虽然对于我们开发人员来说可以这种显式的数据库主键会方便调试过程, ...

  4. [转]Openwrt的Inittab

    转来一篇关于启动的文章,特意收藏.http://see.sl088.com/wiki/Inittab 文件位于/etc/inittab编辑方法vi /etc/inittab初始内容::sysinit: ...

  5. ode.js 版本控制 nvm 和 n 使用 及 nvm 重启终端失效的解决方法

    今天的话题包括2个部分 node.js 下使用 nvm 或者 n 来进行版本控制 nvm 安装node.js 版本后,重启终端 node , npm 环境变量失效 第一部分 用什么来管理 node.j ...

  6. hdu 5327 Olympiad

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5327 Olympiad Description You are one of the competit ...

  7. hdu 3282 Running Median

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=3282 Running Median Description For this problem, you ...

  8. echo换行的蛋疼事

    openstack@openstack:~$ echo "abc" | shasum03cfd743661f07975fa2f1220c5194cbaff48451  -而使用Ja ...

  9. 条款38:通过聚合设计has-a或者is-implemented-in-terms-of

    聚合:类型之间的一种关系,就是一种类型内含有另一种类型的变量. has-a: class Address { }; class PhoneNumber { }; class Person { publ ...

  10. Win7下的本地网站发布

    今天闲来无事研究了一下网站的发布,之前一直以为很难的样子,当真正实现了就觉得他也不过如此,现在来把我的研究结果分享一下,如果有问题望大家提出来! 首先发布网站我们要在本地的电脑上安装IIS,这个就不多 ...