QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#744315#5414. Stop, Yesterday Please No MoreYoimiyaAC ✓131ms19052kbC++202.7kb2024-11-13 21:30:272024-11-13 21:30:28

Judging History

This is the latest submission verdict.

  • [2024-11-13 21:30:28]
  • Judged
  • Verdict: AC
  • Time: 131ms
  • Memory: 19052kb
  • [2024-11-13 21:30:27]
  • Submitted

answer

#include <bits/stdc++.h>
#define endl '\n' 
using namespace std;
using ll = long long;
typedef pair<ll, ll> PII;
const ll N = 1e3 + 5;
const ll INF = 1e18;

map <char, PII> mp = { {'L', {0, -1}}, {'R', {0, 1}}, {'U', {-1, 0}}, {'D', {1, 0}} };
ll tree[N][N];
ll n, m, k;

typedef struct INFO {
    PII ss, ee;
    bool operator<(const INFO &other) const {
        return (ss == other.ss ? ee < other.ee : ss < other.ss);
    }
}info;

void add(ll x, ll y, ll z) {
    ll memo_y = y;
    while (x <= n) {
        y = memo_y;
        while (y <= m)
            tree[x][y] += z, y += y & -y;
        x += x & -x;
    }
}
void range_add(ll xa, ll ya, ll xb, ll yb, ll z) {
    add(xa, ya, z);
    add(xa, yb + 1, -z);
    add(xb + 1, ya, -z);
    add(xb + 1, yb + 1, z);
}
ll ask(ll x, ll y) {
    ll res = 0, memo_y = y;
    while (x) {
        y = memo_y;
        while (y)
            res += tree[x][y], y -= y & -y;
        x -= x & -x;
    }
    return res;
}

void solve() {
    cin >> n >> m >> k;
    for (ll i = 0; i <= n + 1; i++){
        for (ll j = 0; j <= m + 1; j++)
            tree[i][j] = 0;
    }
    string s; cin >> s;
    ll l = s.length();
    s = ' ' + s;

    ll sx = 1, sy = 1, ex = n, ey = m;
    ll xx = 0, yy = 0;
    for (ll i = 1; i <= l; i++) {
        if (s[i] == 'L') {
            yy--; sy = max(sy, 1 - yy);
        }
        else if (s[i] == 'R') {
            yy++; ey = min(ey, m - yy);
        }
        else if (s[i] == 'U') {
            xx--; sx = max(sx, 1 - xx);
        }
        else if (s[i] == 'D') {
            xx++; ex = min(ex, n - xx);
        }
    }
    if (sx > ex || sy > ey) {
        if (k == 0) cout << n * m << endl;
        else cout << 0 << endl;
        return;
    }
    k = (ex - sx + 1) * (ey - sy + 1) - k;
    set <info> st;
    st.insert({{sx, sy}, {ex, ey}});
    // cout << sx << ' ' << sy << ' ' << ex << ' ' << ey << endl;
    for (ll i = 1; i <= l; i++) {
        sx += mp[s[i]].first, sy += mp[s[i]].second;
        ex += mp[s[i]].first, ey += mp[s[i]].second;
        // cout << sx << ' ' << sy << ' ' << ex << ' ' << ey << endl;
        st.insert({{sx, sy}, {ex, ey}});
    }
    for (auto i: st){
        // printf("%d %d %d %d\n", i.ss.first, i.ss.second, i.ee.first, i.ee.second);
        range_add(i.ss.first, i.ss.second, i.ee.first, i.ee.second, 1);
    }
    ll ans = 0;
    for (ll i = 1; i <= n; i++){
        for (ll j = 1; j <= m; j++){
            if (ask(i, j) == k) ans++; 
        }
    }
    cout << ans << endl;

    // cout << sx << ' ' << sy << ' ' << ex << ' ' << ey << endl;
    // cout << "----------\n";
}

signed main() {
    ios::sync_with_stdio(0), cin.tie(0);
    ll t; cin >> t;
    while (t--) solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3612kb

input:

3
4 5 3
ULDDRR
4 5 0
UUUUUUU
4 5 10
UUUUUUU

output:

2
20
0

result:

ok 3 number(s): "2 20 0"

Test #2:

score: 0
Accepted
time: 11ms
memory: 4032kb

input:

1060
19 12 0
UDLDDUUUUDDDLLRDUDUURULUUUDRDUDRDRLRLRLULULLLDLDDRLUUUURUUUDDRLLRUUUDULURUULLRDRLRDDURDUUURRRLURLRUULRRUDURDLUUURDLURDDLUUURDDRLLURRDLRUDLRDRLLRRDRDDLDRURRRLUDULLLRUUDLRRURRDLLRRRDLLRDDDLRLRURURDDDL
11 1 0
UR
3 18 33
UDRLR
17 11 132
RLDRDLDRUU
6 10 13
UULUDDLRDLUUDLDD
1 15 0
D
6 20 50
D...

output:

228
11
20
99
18
15
34
240
15
0
0
13
14
18
26
16
1
19
108
8
2
2
3
7
0
30
16
21
0
8
10
9
15
5
320
11
7
3
0
0
12
0
11
0
0
14
0
22
36
51
23
7
6
4
2
48
28
8
63
22
49
13
10
4
108
10
18
44
0
15
9
0
4
30
14
99
105
10
14
17
0
66
10
11
28
52
34
56
33
14
56
90
14
0
121
3
48
30
36
13
0
30
7
8
3
11
16
45
20
34
0...

result:

ok 1060 numbers

Test #3:

score: 0
Accepted
time: 16ms
memory: 11444kb

input:

1
1000 1000 979065
DDUULULUDULLULLDLUULURRLDURLRDLRRUURUUUDLRLUUDUUDUDLLDDDULU

output:

958416

result:

ok 1 number(s): "958416"

Test #4:

score: 0
Accepted
time: 16ms
memory: 11372kb

input:

1
1000 1000 943471
LRLDLURLDLRDRDUULULRDDLLRURDUURLLDDLDLDDLLLUUURLDRUDRLLUUUUUDLUUDLURURRDLRLRRRLULRRULURLRRDLDRLUDRRLDDLUDRRLLUDLLLRDULRRRRLDUUDRDLULUUUUDRRDULUDLLUUDLDURDRRLRRLDRLDDRURURLUULRRLDLLRLRDRRUULDLDLULLDLLRULLRUULURDURRLUUDUULLULDLRUDDLRLRLLUDDDLLLUDRRLDDULRRURRDURDDRDLLULRLULURLRDLLURD...

output:

889224

result:

ok 1 number(s): "889224"

Test #5:

score: 0
Accepted
time: 131ms
memory: 19052kb

input:

1
1000 1000 315808
LLRURURRDDDULLDDUDRDLRLLLDDDLUDRDURLDULRLRULUUDLUULUUDULLLLDDURLDUULUUDLLDLLDRUDUULRLLRLRUURLRLULLDDLLDUDLLRUUDRLDLUULDLLDRRRURDULLDRRRDURURDRLDURURUDLURLDURRLRRUDUDURDRLRRRDLRRURLURUDRRLDLRULLDLUURDURLURLLRDLRDRUURURDRUDUUUDLRRLUDLUUDUDDRRDUULUUDDRLLULDUUDRURRDRLULRLULDURLURUDLLD...

output:

426

result:

ok 1 number(s): "426"

Test #6:

score: 0
Accepted
time: 16ms
memory: 11400kb

input:

1
1000 1000 986018
LLULDRRRDDURRUDRUURRRDDLUUDUULRULRDULLD

output:

972180

result:

ok 1 number(s): "972180"

Test #7:

score: 0
Accepted
time: 16ms
memory: 11440kb

input:

1
1000 1000 945431
DDRRURUUDLDULLDLDDLRULDLLDDRRLUDRLUURRLDRDLURUURRRRLRURLURULLLDRDDDRRRLDLDRLRDDUURRURDDDLRUURLUURLRDUDDDLLDUURLDLUDLLRRDUUDRLUULLUULDLURRUDLUURLRLRURDUDRRRDRLRUDLLLLURLULRLRLRRDDUDLRLDUUUULUDLLURRLURRDLRURRRULDDLLLRLRDLUDLLDDRULDUULRDDUUDDUDLURDULLDUDDLULRULDRLDDULDULLUDLULUDRURRR...

output:

893000

result:

ok 1 number(s): "893000"

Test #8:

score: 0
Accepted
time: 111ms
memory: 15160kb

input:

1
1000 1000 460035
RDDUURDULDDLDDLDDLDRRULLRLUURLURRRDRUDDDRDLDLDULUDLRLLRRLRRURRRDLRLUDRDURULDRRDDDDDDLRLDULUULDUDRLLUUUURUUDRURLRRULDRDRUUUUULULRURDDRLRULLLRDRRULUDDUDDLLLRDRUULUUDDRLURDLDURRDLRRLDRRUDLUULRDLURULLDLRLLDDURDUDLDULDLLRULRDLRLUULLUDRUDDDLRRDULULLRUURLUURRLLLLRLDRURLLRLDRRDDDRLUUUUDUL...

output:

417

result:

ok 1 number(s): "417"

Test #9:

score: 0
Accepted
time: 16ms
memory: 11456kb

input:

1
1000 1000 992010
LLLLLDLDRRLUDRR

output:

1999

result:

ok 1 number(s): "1999"

Test #10:

score: 0
Accepted
time: 20ms
memory: 11484kb

input:

1
1000 1000 919600
LLDLRUDRLURRUDRDRRDLRUDLRRRUUULDLDURDDDRUURRRLLURULDRLRLULLULDRULULRLRRRURLDDDRUUULUDLLLLRRLLRDDRDULUDLRLRLDRLUDUDURRULUULLDULUULDLLDRDULUDLDULDDUULDDRRURDRDULRRLDRRDUURURRLUUUDRRLDRRDDLULRDDLDLLRLRLLLRULUUUURRRLDLRUDRRLRURDRLDULLLUDRULLDLDRRUUDLRRLLRLDDLUDLRLRRURUUDUULUDURDURRLUU...

output:

944

result:

ok 1 number(s): "944"

Test #11:

score: 0
Accepted
time: 97ms
memory: 13008kb

input:

1
1000 1000 804351
DLRLDLLLLUDRDURRLDDRRLRUULURURDDDRDLRUDDULRRLLULURDRUUDRURRLURRRDRURRDRLULRDLRRDRRDDUDLUDLDULRUURRLRUUDRLDDRDDUUDULUULUUUDLRURULLRDUUDDDRRLDRUDDUUDRURLRDRUDLRLDDRRLLRLRDUDDULLULRLLDDUDDDUULDULLRRULULDUUULUDRRDRLUDLRRDDUDLRRDDLDLDRUULRRRRRLRLULLRDDRDDDULDRRURUDDLURLRLURLRDRULUDULUU...

output:

640000

result:

ok 1 number(s): "640000"