QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#744249#5414. Stop, Yesterday Please No MoreYoimiyaWA 10ms5828kbC++202.6kb2024-11-13 21:19:112024-11-13 21:19:17

Judging History

你现在查看的是最新测评结果

  • [2024-11-13 21:19:17]
  • 评测
  • 测评结果:WA
  • 用时:10ms
  • 内存:5828kb
  • [2024-11-13 21:19:11]
  • 提交

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 = { {'U', {0, -1}}, {'D', {0, 1}}, {'L', {-1, 0}}, {'R', {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] == 'U') {
            yy--; sy = max(sy, 1 - yy);
        }
        else if (s[i] == 'D') {
            yy++; ey = min(ey, m - yy);
        }
        else if (s[i] == 'L') {
            xx--; sx = max(sx, 1 - xx);
        }
        else if (s[i] == 'R') {
            xx++; ex = min(ex, n - xx);
        }
    }
    if (sx > ex || sy > ey) {
        if (k == 0) cout << n * m << endl;
        else cout << 0 << endl;
        return;
    }
    set <info> st;
    st.insert({{sx, sy}, {ex, ey}});
    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;
        st.insert({{sx, sy}, {ex, ey}});
    }
    for (auto i: st){
        // prllf("%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), cout.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: 3604kb

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: -100
Wrong Answer
time: 10ms
memory: 5828kb

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
0
0
0
0
0
240
0
0
0
0
0
18
0
0
0
0
0
0
0
0
3
0
0
0
0
0
0
0
0
9
0
0
320
0
0
0
0
0
0
0
0
0
0
0
0
22
0
5
0
11
0
0
0
48
28
8
0
0
0
0
0
0
0
0
0
44
0
0
0
0
0
7
0
0
16
0
0
17
0
66
0
11
28
0
0
0
0
0
0
90
0
0
0
0
48
0
0
0
0
30
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
48
0
0
225
0
0
0
0
0
0
90
0
0
228
0
30
0
...

result:

wrong answer 3rd numbers differ - expected: '20', found: '0'