关于 abc D 的一些疑惑
  • 板块学术版
  • 楼主wuyixiang
  • 当前回复6
  • 已保存回复6
  • 发布时间2025/8/30 21:42
  • 上次更新2025/8/31 13:55:48
查看原帖
关于 abc D 的一些疑惑
703022
wuyixiang楼主2025/8/30 21:42

这份代码会 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了十发

2025/8/30 21:42
加载中...