二分答案加曼哈顿距离
#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define LL long long
#define N 100010
char str[N];
LL dx[N],dy[N];
LL sx,sy,ex,ey,n;
bool check(LL mid)
{
LL a=mid/n,b=mid%n,x,y;
x=sx+a*dx[n]+dx[b];
y=sy+a*dy[n]+dy[b];
LL c=abs(x-ex)+abs(y-ey);
if(c<=mid)return true;
else return false;
}
int main()
{
scanf("%lld%lld%lld%lld%lld",&sx,&sy,&ex,&ey,&n);
scanf("%s",str+1);
for(int i=1;i<=n;i++)
{
dx[i]=dx[i-1];
dy[i]=dy[i-1];
if(str[i]=='U')dy[i]++;
else if(str[i]=='D')dy[i]--;
else if(str[i]=='L')dx[i]--;
else dx[i]++;
}
LL l=0,r=1e18,mid,ans=-1;
while(l<=r)
{
mid=(l+r)/2;
if(check(mid))
{
ans=mid;
r=mid-1;
}
else
{
l=mid+1;
}
}
cout<<ans<<endl;
return 0;
}