ABC D题 AC*10 WA*14 求调
  • 板块题目总版
  • 楼主shuqiang
  • 当前回复1
  • 已保存回复1
  • 发布时间2025/8/30 21:40
  • 上次更新2025/8/31 13:23:04
查看原帖
ABC D题 AC*10 WA*14 求调
685964
shuqiang楼主2025/8/30 21:40
#include<iostream>
#include<string>

using namespace std;
typedef long long ll;

const ll N = 1e5 + 10;
ll n, ax, ay, bx, by, w1[N], w2[N], ans;
ll m1, m2;
char op1[N], op2[N];

int main(){
	cin >> ax >> ay >> bx >> by;
	cin >> n >> m1 >> m2;
	for(ll i = 1; i <= m1; i++){
		cin >> op1[i] >> w1[i];
		w1[i] += w1[i-1];
	}
	for(ll i = 1; i <= m2; i++){
		cin >> op2[i] >> w2[i];
		w2[i] += w2[i-1];
	}
	ll idx1 = 1, idx2 = 1; ll nw = 0;
	while(nw < n){
		ll nxt = min(w1[idx1], w2[idx2]);
		ll l1a, r1a, l2a, r2a, l1b, r1b, l2b, r2b;
		l1a = r1a = ax, l2a = r2a = ay;
		l1b = r1b = bx, l2b = r2b = by;
		if(op1[idx1] == 'U'){
			l1a -= nxt - nw;
			ax -= nxt - nw;
			r1a--;
		}
		else if(op1[idx1] == 'D'){
			r1a += nxt - nw;
			ax += nxt - nw;
			l1a++;
		}
		else if(op1[idx1] == 'R'){
			r2a += nxt - nw;
			ay += nxt - nw;
			l2a++;
		}
		else{
			l2a -= nxt - nw;
			ay -= nxt - nw;
			r2a--;
		}
		if(op2[idx2] == 'U'){
			l1b -= nxt - nw;
			bx -= nxt - nw;
			r1b--;
		}
		else if(op2[idx2] == 'D'){
			r1b += nxt - nw;
			bx += nxt - nw;
			l1b++;
		}
		else if(op2[idx2] == 'R'){
			r2b += nxt - nw;
			by += nxt - nw;
			l2b++;
		}
		else{
			l2b -= nxt - nw;
			by -= nxt - nw;
			r2b--;
		}
//		cout << l1a << ' ' << r1a << ' ' << l2a << ' ' << r2a << '\n';
//		cout << l1b << ' ' << r1b << ' ' << l2b << ' ' << r2b << '\n';
//		cout << (min(r1a, r1b) - max(l1a, l1b) + 1) << ' ' << (min(r2a, r2b) - max(l2a, l2b) + 1) << '\n';
		if((ax == bx && ay == by && op1[idx1] == op2[idx2]) && (min(r1a, r1b) - max(l1a, l1b) + 1) > 0 && (min(r2a, r2b) - max(l2a, l2b) + 1) > 0){
			ans += max((min(r1a, r1b) - max(l1a, l1b) + 1) * (min(r2a, r2b) - max(l2a, l2b) + 1), 0ll);
		}
		else{
			if(op1[idx1] == 'L' && op2[idx2] == 'R'){
				ans += (min(r1a, r1b) - max(l1a, l1b) >= 0) * (min(r2a, r2b) - max(l2a, l2b) >= 0) * ((ay&1)^(by&1)^1);
			}
			else if(op1[idx1] == 'R' && op2[idx2] == 'L'){
				ans += (min(r1a, r1b) - max(l1a, l1b) >= 0) * (min(r2a, r2b) - max(l2a, l2b) >= 0) * ((ay&1)^(by&1)^1);
			}
			else if(op1[idx1] == 'U' && op2[idx2] == 'D'){
				ans += (min(r1a, r1b) - max(l1a, l1b) >= 0) * (min(r2a, r2b) - max(l2a, l2b) >= 0) * ((ax&1)^(bx&1)^1);
			}
			else if(op1[idx1] == 'D' && op2[idx2] == 'U'){
				ans += (min(r1a, r1b) - max(l1a, l1b) >= 0) * (min(r2a, r2b) - max(l2a, l2b) >= 0) * ((ax&1)^(bx&1)^1);
			}
			else ans += (min(r1a, r1b) - max(l1a, l1b) >= 0) * (min(r2a, r2b) - max(l2a, l2b) >= 0);
		}
//		if(min(r1a, r1b) == max(l1a, l1b) && min(r2a, r2b) == max(l2a, l2b)){
//			ans++;
//		}
//		cout << ans << '\n';
		if(nxt == w1[idx1]) idx1++;
		if(nxt == w2[idx2]) idx2++;
		nw = nxt;
	}
	cout << ans <<'\n';
    return 0;
}

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