QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#744249 | #5414. Stop, Yesterday Please No More | Yoimiya | WA | 10ms | 5828kb | C++20 | 2.6kb | 2024-11-13 21:19:11 | 2024-11-13 21:19:17 |
Judging History
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();
}
详细
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'