Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cstdlib>
- #include<cmath>
- #include<algorithm>
- #include<vector>
- #include<queue>
- #include<stack>
- #include<map>
- #include<utility>
- #include<set>
- #define FOR(i, s, e) for(int i=s; i<e; i++)
- #define loop(i, n) FOR(i, 0, n)
- #define sf scanf
- #define pf printf
- #define pb push_back
- #define MP make_pair
- #define fr first
- #define sc second
- #define ll long long
- #define dd double
- #define all(v) v.begin(), v.end()
- #define PI acos(-1.0)
- #define mem(ara, value) memset(ara, value, sizeof(ara))
- #define paii pair<int, int>
- #define pall pair<ll, ll>
- #define SZ(a) int(a.size())
- #define read(nm) freopen(nm, "r", stdin)
- #define write(nm) freopen(nm, "w", stdout)
- #define dump(x) cout<<#x<<" = "<<x<<endl
- using namespace std;
- #define take(args...) asdf,args
- #define debug(args...) asdfg,args; cout<<endl
- struct ASDF{
- ASDF& operator,(int &a) {
- sf("%d", &a);
- return *this;
- }
- ASDF& operator,(long int &a){
- sf("%ld", &a);
- return *this;
- }
- ASDF& operator,(long long int &a){
- sf("%lld", &a);
- return *this;
- }
- ASDF& operator,(char &c){
- sf("%c", &c);
- return *this;
- }
- ASDF& operator,(double &d){
- sf("%lf", &d);
- return *this;
- }
- template<typename T>
- ASDF& operator,(T &a){
- cin>>a;
- return *this;
- }
- }asdf;
- struct ASDFG{
- template<typename T>
- ASDFG& operator,(vector<T> &v){
- pf("[");
- cout<<v[0];
- FOR(i, 1, SZ(v)){
- cout<<", "<<v[i];
- }
- pf("]");
- return *this;
- }
- template<typename T>
- ASDFG& operator,(T x) {
- cout<<x<<" ";
- return *this;
- }
- }asdfg;
- //Header ends here
- ostream &operator<<(ostream &os, paii s)
- {
- cout<<"(" <<s.fr<<", "<<s.sc<<")";
- return os;
- }
- int main()
- {
- paii lastPos;
- string str;
- take(lastPos.fr, lastPos.sc, str);
- paii currentPos;
- currentPos.fr = 0;
- currentPos.sc = 0;
- vector<paii>allPos;
- allPos.pb(currentPos);
- loop(i, SZ(str))
- {
- switch(str[i])
- {
- case 'U':
- currentPos.sc++;
- break;
- case 'D':
- currentPos.sc--;
- break;
- case 'L':
- currentPos.fr--;
- break;
- case 'R':
- currentPos.fr++;
- break;
- }
- //cout<<currentPos<<str[i];
- allPos.pb(currentPos);
- }
- //debug(currentPos);
- bool ifPossible = false;
- paii diff = currentPos;
- int n;
- loop(i, SZ(allPos))
- {
- currentPos = allPos[i];
- if(diff.fr == 0 && diff.sc == 0)
- {
- if(lastPos.fr == currentPos.fr && lastPos.sc == currentPos.sc)
- {
- ifPossible = 1;
- break;
- }
- }
- else if(diff.fr == 0)
- {
- if(lastPos.fr == currentPos.fr &&(lastPos.sc - currentPos.sc)%diff.sc == 0 && (lastPos.sc - currentPos.sc)/diff.sc >-1)
- {
- ifPossible = 1;
- break;
- }
- }
- else if(diff.sc == 0)
- {
- if(lastPos.sc == currentPos.sc && (lastPos.fr - currentPos.fr)%diff.fr == 0 && (lastPos.fr - currentPos.fr)/diff.fr > -1)
- {
- ifPossible = 1;
- break;
- }
- }
- else
- {
- if((lastPos.fr - currentPos.fr)%diff.fr == 0)
- {
- n = (lastPos.fr - currentPos.fr)/diff.fr;
- if(n > -1 && n*diff.sc + currentPos.sc == lastPos.sc)
- {
- ifPossible = 1;
- break;
- }
- }
- }
- }
- //debug(allPos);
- if(ifPossible)cout<<"Yes";
- else cout<<"No";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement