悬关求助 abc421_d
  • 板块学术版
  • 楼主zajasi
  • 当前回复5
  • 已保存回复5
  • 发布时间2025/8/31 17:34
  • 上次更新2025/8/31 21:27:46
查看原帖
悬关求助 abc421_d
754000
zajasi楼主2025/8/31 17:34

WA * 9。已魔怔。

严重怀疑是不是题读错了。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pb push_back
#define mp make_pair
int x, y, tx, ty;
int n, m, l;
pair<char, int> a[100010];
pair<char, int> b[100010];
int z;
int t1 = 1, t2 = 1;
void walk(char c, int &x, int &y, int k)
{
    if (c == 'U')
        x -= k;
    if (c == 'D')
        x += k;
    if (c == 'L')
        y -= k;
    if (c == 'R')
        y += k;
}
void work(char c1, int k, char c2)
{
    if (c1 == c2)
    {
        if (x == tx && y == ty)
        {
            z += k;
        }
    }
    else
    {
        if (c1 == 'U')
        {
            if (tx < x)
            {
                if (c2 == 'D')
                {
                    if (y == ty && abs(x - tx) % 2 == 0 && abs(x - tx) / 2 <= k)
                        z++;
                }
                if (c2 == 'R')
                {
                    if (x - y == tx - ty && abs(x - tx) <= k)
                        z++;
                }
                if (c2 == 'L')
                {
                    if (x + y == tx + ty && abs(x - tx) <= k)
                        z++;
                }
            }
        }
        if (c1 == 'D')
        {
            if (tx > x)
            {
                if (c2 == 'U')
                {
                    if (y == ty && abs(x - tx) % 2 == 0 && abs(x - tx) / 2 <= k)
                        z++;
                }
                if (c2 == 'R')
                {
                    if (x + y == tx + ty && abs(x - tx) <= k)
                        z++;
                }
                if (c2 == 'L')
                {
                    if (x - y == tx - ty && abs(x - tx) <= k)
                        z++;
                }
            }
        }
        if (c1 == 'L')
        {
            if (ty < y)
            {
                if (c2 == 'R')
                {
                    if (x == tx && abs(y - ty) % 2 == 0 && abs(y - ty) / 2 <= k)
                        z++;
                }
                if (c2 == 'U')
                {
                    if (x + y == tx + ty && abs(x - tx) <= k)
                        z++;
                }
                if (c2 = 'D')
                {
                    if (x - y == tx - ty && abs(x - tx) <= k)
                        z++;
                }
            }
        }
        if (c1 == 'R')
        {
            if (ty > y)
            {
                if (c2 == 'L')
                {
                    if (x == tx && abs(y - ty) % 2 == 0 && abs(y - ty) / 2 <= k)
                        z++;
                }
                if (c2 == 'D')
                {
                    if (x + y == tx + ty && abs(x - tx) <= k)
                        z++;
                }
                if (c2 == 'U')
                {
                    if (x - y == tx - ty && abs(x - tx) <= k)
                        z++;
                }
            }
        }
    }
}
main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> x >> y >> tx >> ty;
    cin >> n >> m >> l;
    for (int i = 1; i <= m; i++)
    {
        cin >> a[i].first >> a[i].second;
    }
    for (int i = 1; i <= l; i++)
    {
        cin >> b[i].first >> b[i].second;
    }
    // int t1 = 1, t2 = 1;
    // int z = 0;
    while (t1 <= m && t2 <= l)
    {
        int xx = min(a[t1].second, b[t2].second);
        char c1 = a[t1].first;
        char c2 = b[t2].first;
        work(c1, xx, c2);
        walk(c1, x, y, xx);
        walk(c2, tx, ty, xx);
        a[t1].second -= xx;
        if (a[t1].second == 0)
            t1++;
        b[t2].second -= xx;
        if (b[t2].second == 0)
            t2++;
        // cout << x << " " << y << " " << tx << " " << ty << "\n";
    }
    cout << z;
    return 0;
}
2025/8/31 17:34
加载中...