枚举机器人走的最后一步,用终点坐差后计算周期次数
trick:周期次数要>=0
#include <iostream>
#include <string>
#include <vector>
#include <cstring>
#include <cstdio>
#include <map>
#include <queue>
#include <algorithm>
#include <stack>
#include <cstring>
#include <cmath>
#include <set>
#include <vector>
using namespace std;
template <class T>
inline bool rd(T &ret) {
char c; int sgn;
if (c = getchar(), c == EOF) return 0;
while (c != '-' && (c<'0' || c>'9')) c = getchar();
sgn = (c == '-') ? -1 : 1;
ret = (c == '-') ? 0 : (c - '0');
while (c = getchar(), c >= '0'&&c <= '9') ret = ret * 10 + (c - '0');
ret *= sgn;
return 1;
}
template <class T>
inline void pt(T x) {
if (x < 0) {
putchar('-');
x = -x;
}
if (x > 9) pt(x / 10);
putchar(x % 10 + '0');
}
typedef long long ll;
typedef pair<int, int> pii;
const int inf = 1e9;
const int N = 105;
ll a, b;
char s[N];
ll x[N], y[N];
int n;
bool work() {
for (int i = 0; i < n; i++)
{
ll l = a - x[i];
ll r = b - y[i];
if (x[n] == 0)
{
if (l)continue;
if (y[n] == 0)
{
if (r)continue;
else return true;
}
if (r%y[n])continue;
if(r/y[n] >= 0)
return true;
else continue;
}
if (l%x[n])continue;
if (l / x[n] < 0)continue;
if (y[n] == 0)
{
if (r)continue;
return true;
}
if (r%y[n])continue;
if (l / x[n] == r / y[n]) {
if (l / x[n] >= 0)return true;
}
}
return false;
}
int main() {
rd(a); rd(b);
scanf("%s", s + 1); n = strlen(s + 1);
x[0] = y[0] = 0;
for (int i = 1; s[i]; i++) {
x[i] = x[i - 1]; y[i] = y[i - 1];
if (s[i] == 'U')y[i] = y[i - 1] + 1;
if (s[i] == 'D')y[i] = y[i - 1] - 1;
if (s[i] == 'L')x[i] = x[i - 1] - 1;
if (s[i] == 'R')x[i] = x[i - 1] + 1;
}
work() ? puts("Yes") : puts("No");
return 0;
}