其实就是 abc421D 了。跟 Fwb 坐一桌。
:::info[My Submission] https://atcoder.jp/contests/abc421/submissions/68935714 ::: :::error[my code]{open}
#include <bits/stdc++.h>
using namespace std;
#define int long long
struct node
{
char x;
int t;
};
vector<node> a,b;
int side(char s)
{
if(s=='U'||s=='D')
return 1;
return -1;
}
int w(char s)
{
if(s=='D'||s=='R')return 1;
return -1;
}
int sgn(int x)
{
if(x>0)return 1;
if(x<0)return -1;
return 0;
}
signed main()
{
int nx,ny,mx,my;
cin>>nx>>ny>>mx>>my;
int n,m,l;cin>>n>>m>>l;
for(int i=1;i<=m;i++)
{
char x;int t;cin>>x>>t;
if(i-1)t+=a.back().t;
a.push_back((node){x,t});
}
for(int i=1;i<=l;i++)
{
char x;int t;cin>>x>>t;
if(i-1)t+=b.back().t;
b.push_back((node){x,t});
}
int t1=0,t2=0;
int now=0;//当前时间
int ans=0;
while(t1<m&&t2<l)
{
if(side(a[t1].x)!=side(b[t2].x))
{
if(nx==mx||ny==my);
else{
int ls=side(a[t1].x)==1?-w(a[t1].x):w(b[t2].x);
int rs=side(a[t1].x)==-1?-w(a[t1].x):w(b[t2].x);
if(abs(nx-mx)==abs(ny-my)&&abs(nx-mx)<=(min(a[t1].t,b[t2].t)-now)&&sgn(nx-mx)==ls&&sgn(ny-my)==rs)
ans++;
}
}
else
{
if(w(a[t1].x)==w(b[t2].x)&&nx==mx&&ny==my)
ans+=min(a[t1].t,b[t2].t)-now;
else if(side(a[t1].x)==1?ny==my:nx==mx)
{
if(nx==mx&&ny==my);
else if((abs(nx-mx)+abs(ny-my))%2==0&&w(a[t1].x)!=w(b[t2].x)&&(min(a[t1].t,b[t2].t)-now)*2>=(abs(nx-mx)+abs(ny-my)))
ans++;
}
}
if(side(a[t1].x)==1)nx+=(min(a[t1].t,b[t2].t)-now)*w(a[t1].x);
else ny+=(min(a[t1].t,b[t2].t)-now)*w(a[t1].x);
if(side(b[t2].x)==1)mx+=(min(a[t1].t,b[t2].t)-now)*w(b[t2].x);
else my+=(min(a[t1].t,b[t2].t)-now)*w(b[t2].x);
now=min(a[t1].t,b[t2].t);
if(a[t1].t<b[t2].t)t1++;
else if(a[t1].t>b[t2].t)t2++;
else t1++,t2++;
}
cout<<ans<<'\n';
return 0;
}
:::