这份代码会 AC *23,WA *1:
#include <iostream>
#define int long long
using namespace std;
int a,b,c,d;
int n,m,l;
int Dk[200005],Dl[200005];
char dk[200005],dl[200005];
int L = 1,R = 1,ans;
void go()
{
if(dk[L] == dl[R] && a == c && b == d)ans += min(Dk[L],Dl[R]);
int adl = min(Dk[L],Dl[R]);
if(dk[L] == 'U')a -= adl;
else if(dk[L] == 'R')b += adl;
else if(dk[L] == 'D')a += adl;
else b -= adl;
if(dl[R] == 'U')c -= adl;
else if(dl[R] == 'R')d += adl;
else if(dl[R] == 'D')c += adl;
else d -= adl;
Dk[L] -= adl,Dl[R] -= adl;
if(!Dk[L])L ++;
if(!Dl[R])R ++;
}
signed main()
{
cin >> a >> b >> c >> d;
if((a + b) % 2 != (c + d) % 2)
{
cout << 0;
return 0;
}
cin >> n >> m >> l;
for(int i = 1;i <= m;i ++)
cin >> dk[i] >> Dk[i];
for(int i = 1;i <= l;i ++)
cin >> dl[i] >> Dl[i];
while(L <= m && R <= l)
{
if(dk[L] == 'U')
{
int mt = b;
if(dl[R] == 'L')
{
int enf = d - b;
if(enf > 0 && enf <= min(Dk[L],Dl[R]) && a - enf == c)ans ++;
}
if(dl[R] == 'R')
{
int enf = b - d;
if(enf > 0 && enf <= min(Dk[L],Dl[R]) && a - enf == c)ans ++;
}
if(dl[R] == 'D')
{
if(b == d && a > c && (a - c) % 2 == 0 && (a - c) / 2 <= min(Dk[L],Dl[R]))ans ++;
}
}
if(dk[L] == 'D')
{
int mt = b;
if(dl[R] == 'L')
{
int enf = d - b;
if(enf > 0 && enf <= min(Dk[L],Dl[R]) && a + enf == c)ans ++;
}
if(dl[R] == 'R')
{
int enf = b - d;
if(enf > 0 && enf <= min(Dk[L],Dl[R]) && a + enf == c)ans ++;
}
if(dl[R] == 'U')
{
if(b == d && c > a && (c - a) % 2 == 0 && (c - a) / 2 <= min(Dk[L],Dl[R]))ans ++;
}
}
if(dk[L] == 'L')
{
int mt = a;
if(dl[R] == 'D')
{
int enf = a - c;
if(enf > 0 && enf <= min(Dk[L],Dl[R]) && b - enf == d)ans ++;
}
if(dl[R] == 'U')
{
int enf = c - a;
if(enf > 0 && enf <= min(Dk[L],Dl[R]) && b - enf == d)ans ++;
}
if(dl[R] == 'R')
{
if(a == c && d < b && (b - d) % 2 == 0 && (b - d) / 2 <= min(Dk[L],Dl[R]))ans ++;
}
}
if(dk[L] == 'R')
{
int mt = a;
if(dl[R] == 'D')
{
int enf = a - c;
if(enf > 0 && enf <= min(Dk[L],Dl[R]) && b + enf == d)ans ++;
}
if(dl[R] == 'U')
{
int enf = c - a;
if(enf > 0 && enf <= min(Dk[L],Dl[R]) && b + enf == d)ans ++;
}
if(dl[R] == 'L')
{
if(a == c && d > b && (d - b) % 2 == 0 && (d - b) / 2 <= min(Dk[L],Dl[R]))ans ++;
}
}
go();
}
cout << ans;
}
但我无意把前面输出0的判断删了,结果就过了
很好奇为什么
番外:谁知道这题我WA了十发