思路:分别记录每一时刻所处的位置,当任意没有停下之前(停下指的是不移动的下一时刻),当两个人的位置相同并且移动方向相反才算相遇;当一方停下,没停下的任意一方,只需跟停下的另一方位置进行判断,此时不需要判断方向
#include<bits/stdc++.h>
#define ll long long
#define PI 3.141592653589793
#define E 2.718281828459045
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define mem(a,b) memset(a,b,sizeof(a))
#define FOR( i , a , b ) for ( int i = a ; i <= b ; ++ i )
#define FO( i , n ) for ( int i = 0 ; i < n ; ++ i )
#define lowbit(a) ((a)&-(a))
#define PII pair<ll ,ll >
#define ft first
#define sd second
typedef unsigned long long ull;
const ll mod=10007;
const ll INF=0x3f3f3f3f3f3f3f3f;
const ll Max=1e6+10;
using namespace std;
ll t,n,m,l,k;
ll ans;
ll ta[Max],tb[Max];
char a[Max],b[Max];
/*queue<ll> q;
stack<ll> s;
//升序队列
priority_queue <int,vector<int>,greater<int> > q;
//降序队列
priority_queue <int,vector<int>,less<int> >q;*/
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
ll ma=0,mb=0;
mem(ta,INF);
mem(tb,INF);
for(ll i=1;i<=n;i++)
{ ll x;
char c;
cin>>x>>c;
for(ll i=1;i<=x;i++)
{
if(c=='R'){ta[++t]=ma+1;a[t]='R';}
else {ta[++t]=ma-1;a[t]='L';}//记录位置
ma=ta[t];
}
}
ll t1=0;
for(ll i=1;i<=m;i++)
{ ll x;
char c;
cin>>x>>c;
for(ll i=1;i<=x;i++)
{
if(c=='R'){tb[++t1]=mb+1;b[t1]='R';}
else {tb[++t1]=mb-1;b[t1]='L';}//记录位置
mb=tb[t1];
}
}//t是前者移动的时间,t1是后者移动的时间
for(ll i=1;i<=max(t,t1);i++)
{
if(ta[i]==tb[i]&&i<=min(t,t1))
{if(a[i]!=b[i])
ans++;}
else if(i>min(t,t1)){//有一方已经停下
if(t<t1)//判断是哪一方
{
if(tb[i]==ta[t])
ans++;
}
else
{
if(ta[i]==tb[t1])
ans++;
}
}
}
cout<<ans<<endl;
return 0;
}