CF 322C. Ciel and Robot 枚举+模拟
2017-10-11 13:43
363 查看
题意:初始在(0,0) 操作序列为s,该操作序列可以执行无数次.
-1e9<=a,b<=1e9 .问是否能到达(a,b)这个点?
设x,y为做一次序列s产生的偏移量,f[i],h[i]为 序列s前缀i产生的偏移量.
若存在解 则 a=kx+f[i],b=ky+h[i] k>=0 枚举i判定条件即可.
注意i==0特判还有dx和dy等于0的情况.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+5;
ll a,b,dx=0,dy=0,f
,h
;
char s
;
int main()
{
cin>>a>>b;
scanf("%s",s+1);
int n=strlen(s+1);
for(int i=1;i<=n;i++)
{
if(s[i]=='R')
dx++;
if(s[i]=='L')
dx--;
if(s[i]=='U')
dy++;
if(s[i]=='D')
dy--;
f[i]=dx,h[i]=dy;
}
// cout<<dx<<' '<<dy<<endl;
bool flag=false;
for(int i=1;i<=n;i++)
{
ll k1,k2;
bool mk=true;
if(dx==0)
{
if(a!=f[i])
mk=false;
}
else
{
if((a-f[i])%dx)
mk=false;
else
k1=(a-f[i])/dx;
}
if(dy==0)
{
if(b!=h[i])
mk=false;
}
else
{
if((b-h[i])%dy)
mk=false;
else
k2=(b-h[i])/dy;
}
if(mk&&(dx==0||dy==0||k1==k2)&&(k1>=0&&k2>=0))
flag=true;//cout<<k1<<' '<<k2<<' '<<i<<endl;
}
//i==0
if(dx&&dy)
{
if(a%dx==0&&b%dy==0&&a/dx==b/dy&&a/dx>=0)
flag=true;
}
else if(dx==0&&dy)
{
if(a==0&&b%dy==0&&b/dy>=0)
flag=true;
}
else if(dx&&dy==0)
{
if(b==0&&a%dx==0&&a/dx>=0)
flag=true;
}
if(a==0&&b==0)
flag=true;
puts(flag?"Yes":"No");
return 0;
}
-1e9<=a,b<=1e9 .问是否能到达(a,b)这个点?
设x,y为做一次序列s产生的偏移量,f[i],h[i]为 序列s前缀i产生的偏移量.
若存在解 则 a=kx+f[i],b=ky+h[i] k>=0 枚举i判定条件即可.
注意i==0特判还有dx和dy等于0的情况.
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e3+5;
ll a,b,dx=0,dy=0,f
,h
;
char s
;
int main()
{
cin>>a>>b;
scanf("%s",s+1);
int n=strlen(s+1);
for(int i=1;i<=n;i++)
{
if(s[i]=='R')
dx++;
if(s[i]=='L')
dx--;
if(s[i]=='U')
dy++;
if(s[i]=='D')
dy--;
f[i]=dx,h[i]=dy;
}
// cout<<dx<<' '<<dy<<endl;
bool flag=false;
for(int i=1;i<=n;i++)
{
ll k1,k2;
bool mk=true;
if(dx==0)
{
if(a!=f[i])
mk=false;
}
else
{
if((a-f[i])%dx)
mk=false;
else
k1=(a-f[i])/dx;
}
if(dy==0)
{
if(b!=h[i])
mk=false;
}
else
{
if((b-h[i])%dy)
mk=false;
else
k2=(b-h[i])/dy;
}
if(mk&&(dx==0||dy==0||k1==k2)&&(k1>=0&&k2>=0))
flag=true;//cout<<k1<<' '<<k2<<' '<<i<<endl;
}
//i==0
if(dx&&dy)
{
if(a%dx==0&&b%dy==0&&a/dx==b/dy&&a/dx>=0)
flag=true;
}
else if(dx==0&&dy)
{
if(a==0&&b%dy==0&&b/dy>=0)
flag=true;
}
else if(dx&&dy==0)
{
if(b==0&&a%dx==0&&a/dx>=0)
flag=true;
}
if(a==0&&b==0)
flag=true;
puts(flag?"Yes":"No");
return 0;
}
相关文章推荐
- CF 322C - Ciel and Robot 计算周期
- CF 321A(Ciel and Robot-暴力枚举)
- Codeforces 322C Ciel and Robot【思维+模拟】细节很多= =
- [CF 294D]Shaass and Painter Robot解题报告
- CodeForces 321 A - Ciel and Robot
- Codeforces Round #190 (Div. 2)-C. Ciel and Robot
- CF:322D - Ciel and Duel 贪心 或者 DP 我用的贪心 。。难道sort跟qsort是不一样的么?
- CF321E Ciel and Gondolas 【决策单调性dp】
- CF:322D - Ciel and Duel 贪心 或者 DP 我用的贪心 。。难道sort跟qsort是不一样的么?
- [CF 321D]Ciel and Flipboard解题报告
- CodeForces 321 A - Ciel and Robot
- cf C. Vasya and Robot
- Ciel and Robot
- [CF 351B]Jeff and Furik[归并排序求逆序数]
- CF 263div2 C. Appleman and Toastman
- CF 358C C. Dima and Containers 离线+模拟
- CodeForces 354A - Vasya and Robot 简单思维..赋初值一定不能随便了T_T
- CF 518E(Arthur and Questions-贪心)
- 【CF】 467C George and Job DP
- 【CF 713C】Sonya and Problem Wihtout a Legend(离散化+dp)<POJ 3666变形>