Submission #68925764


Source Code Expand

#include<iostream>
#include<vector>
using namespace std;
#define int long long

int Rt, Ct, Ra, Ca, N, M, L;

pair<int, int> getd(char ch)
{
    if (ch == 'U') return {-1, 0};
    if (ch == 'D') return {1, 0};
    if (ch == 'L') return {0, -1};
    if (ch == 'R') return {0, 1};
    return {0, 0};
}

signed main()
{
    cin >> Rt >> Ct >> Ra >> Ca >> N >> M >> L;
    vector<pair<char, int>> segs(M);
    for(int i=0;i<M;i++) cin >> segs[i].first >> segs[i].second;
    vector<pair<char, int>> segt(L);
    for(int i=0;i<L;i++) cin >> segt[i].first >> segt[i].second;
    int dr = Rt - Ra;
    int dc = Ct - Ca;
    int ccc = 0;
    int i = 0, j = 0;
    while(i < M && j < L)
    {
        int k = min(segs[i].second, segt[j].second);
        char chS = segs[i].first, chT = segt[j].first;
        auto moveS = getd(chS);
        auto moveT = getd(chT);
        int delta_r = moveS.first - moveT.first, delta_c = moveS.second - moveT.second;
        if(delta_r == 0 && delta_c == 0)
        {
            if (dr == 0 && dc == 0) ccc += k;
        }
        else
        {
            if(delta_r == 0)
            {
                if(dr == 0)
                    if(delta_c != 0 && (-dc) % delta_c == 0)
                    {
                        int x = -dc / delta_c;
                        if(x >= 1 && x <= k) ccc++;
                    }
            }
            else if(delta_c == 0)
            {
                if(dc == 0)
                    if(delta_r != 0 && (-dr) % delta_r == 0)
                    {
                        int x = -dr / delta_r;
                        if(x >= 1 && x <= k) ccc++;
                    }
            }
            else
            {
                if((-dr) % delta_r == 0 && (-dc) % delta_c == 0)
                {
                    int x1 = -dr / delta_r, x2 = -dc / delta_c;
                    if(x1 == x2 && x1 >= 1 && x1 <= k) ccc++;
                }
            }
        }
        dr += k * delta_r; dc += k * delta_c;
        segs[i].second -= k; segt[j].second -= k;
        if(segs[i].second == 0) i++;
        if(segt[j].second == 0) j++;
    }
    cout << ccc << endl;
    return 0;
}

Submission Info

Submission Time
Task D - RLE Moving
User yangyang1000
Language C++ 20 (gcc 12.2)
Score 425
Code Size 2231 Byte
Status AC
Exec Time 64 ms
Memory 6472 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 425 / 425
Status
AC × 4
AC × 24
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt
All random_01.txt, random_02.txt, random_03.txt, random_04.txt, random_05.txt, random_06.txt, random_07.txt, random_08.txt, random_09.txt, random_10.txt, random_11.txt, random_12.txt, random_13.txt, random_14.txt, random_15.txt, random_16.txt, random_17.txt, random_18.txt, random_19.txt, random_20.txt, sample_01.txt, sample_02.txt, sample_03.txt, sample_04.txt
Case Name Status Exec Time Memory
random_01.txt AC 62 ms 6236 KiB
random_02.txt AC 39 ms 4916 KiB
random_03.txt AC 12 ms 4472 KiB
random_04.txt AC 25 ms 4464 KiB
random_05.txt AC 11 ms 3640 KiB
random_06.txt AC 64 ms 6468 KiB
random_07.txt AC 61 ms 6300 KiB
random_08.txt AC 62 ms 6288 KiB
random_09.txt AC 60 ms 6400 KiB
random_10.txt AC 59 ms 6376 KiB
random_11.txt AC 62 ms 6344 KiB
random_12.txt AC 62 ms 6240 KiB
random_13.txt AC 62 ms 6328 KiB
random_14.txt AC 63 ms 6472 KiB
random_15.txt AC 61 ms 6308 KiB
random_16.txt AC 60 ms 6472 KiB
random_17.txt AC 61 ms 6400 KiB
random_18.txt AC 62 ms 6400 KiB
random_19.txt AC 60 ms 6340 KiB
random_20.txt AC 60 ms 6268 KiB
sample_01.txt AC 1 ms 3532 KiB
sample_02.txt AC 1 ms 3408 KiB
sample_03.txt AC 1 ms 3536 KiB
sample_04.txt AC 1 ms 3488 KiB