QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#430243 | #8772. House Deconstruction | djq_cpp | AC ✓ | 55ms | 21208kb | C++14 | 2.7kb | 2024-06-03 16:24:03 | 2024-06-03 16:24:04 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL INF = 0x3f3f3f3f3f3f3f3fLL;
LL sgnx(LL x) {
return x < 0 ? -1 : 1;
}
LL absx(LL x) {
return x < 0 ? -x : x;
}
int n, m, t, x[400005], y[400005], psum[400005], pre[400005];
LL rsum[400005], dp[400005];
LL gen_dp(int ps) {
int l, r;
for(l = 0; l <= n && psum[l] != ps; l++) ;
for(r = n; r >= 0 && psum[r] != psum[n] + ps; r--) ;
if(l > r) return INF + absx(ps) * t;
dp[l] = 0;
for(int i = l; i < r; i++) {
dp[i + 1] = INF;
if(y[i] == 1) dp[i + 1] = min(dp[i + 1], dp[i]);
if(pre[i + 1] >= l) dp[i + 1] = min(dp[i + 1], dp[pre[i + 1]] + absx(rsum[i + 1] - rsum[pre[i + 1]]));
}
LL ret = dp[r] + sgnx(ps) * (1LL * ps * t + rsum[l] - rsum[r] + rsum[n]);
return ret;
}
const int MOD = 998244353;
int ans, cdp[400005];
bool bc[400005];
void count(int ps) {
int l, r;
for(l = 0; l <= n && psum[l] != ps; l++) ;
for(r = n; r >= 0 && psum[r] != psum[n] + ps; r--) ;
for(int i = l; i <= r; i++) {
bc[i] = false; cdp[i] = 0;
}
bc[r] = true;
for(int i = r - 1; i >= 0; i--) if(bc[i + 1]) {
if(y[i] == 1 && dp[i + 1] == dp[i]) bc[i] = true;
if(pre[i + 1] >= l && dp[i + 1] == dp[pre[i + 1]] + absx(rsum[i + 1] - rsum[pre[i + 1]])) bc[pre[i + 1]] = true;
}
cdp[l] = 1;
for(int i = l; i < r; i++) if(bc[i + 1]) {
if(dp[i + 1] == dp[i]) cdp[i + 1] = (cdp[i + 1] + cdp[i]) % MOD;
if(pre[i + 1] >= l && dp[i + 1] == dp[pre[i + 1]] + absx(rsum[i + 1] - rsum[pre[i + 1]])) {
int coef = cdp[pre[i + 1]];
cdp[i + 1] = (cdp[i + 1] + coef) % MOD;
}
}
ans = (ans + cdp[r]) % MOD;
}
int pp[800005];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> t >> n >> m;
n += m;
for(int i = 0; i < n; i++) {
char ch;
cin >> x[i] >> ch;
y[i] = ch == 'P' ? -1 : 1;
}
for(int i = 0; i < n; i++) {
psum[i + 1] = psum[i] + y[i];
rsum[i + 1] = rsum[i] + x[i] * y[i];
}
memset(pp, -1, sizeof(pp));
for(int i = 0; i <= n; i++) {
pre[i] = pp[psum[i] + n];
pp[psum[i] + n] = i;
}
int l = -n, r = n;
LL a0, a1;
while(l < r) {
int mid = (l + r) >> 1;
a0 = gen_dp(mid);
a1 = gen_dp(mid + 1);
if(a0 > a1) l = mid + 1;
else r = mid;
}
for(int i = l; i <= r; i++) {
a0 = gen_dp(i); count(i);
}
while(gen_dp(l - 1) == min(a0, a1)) count(--l);
while(gen_dp(r + 1) == min(a0, a1)) count(++r);
assert(r - l <= 1);
cout << a0 << '\n' << ans << '\n';
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 13152kb
input:
6 2 4 1 P 2 H 3 P 4 H 5 H 6 H
output:
2 3
result:
ok 2 lines
Test #2:
score: 0
Accepted
time: 3ms
memory: 13796kb
input:
1000000000 2 4 1 P 6 H 31415926 H 999999998 H 999999999 H 1000000000 P
output:
4 1
result:
ok 2 lines
Test #3:
score: 0
Accepted
time: 55ms
memory: 21208kb
input:
1000000000 199999 200000 3087 P 3282 H 6407 H 6748 P 9535 P 10098 H 16470 H 22311 H 31045 H 31968 H 32549 H 33037 P 36005 P 36308 H 40284 P 46224 H 52394 P 54922 H 55800 P 56582 H 57548 H 62155 P 63067 P 64237 H 66133 P 71351 P 75667 P 79089 P 79646 P 81144 H 91883 P 96680 H 102797 H 105388 H 105971...
output:
262753966206 1
result:
ok 2 lines
Test #4:
score: 0
Accepted
time: 53ms
memory: 20512kb
input:
1000000000 150000 200000 3087 P 3282 H 6407 H 6748 H 9535 H 10098 H 16470 H 22311 H 31968 H 32549 H 33037 P 36005 P 40284 H 52394 P 54922 H 55800 H 56582 H 57548 H 62155 P 63067 P 64237 H 66133 P 71351 P 75667 H 79089 P 79646 P 81144 H 91883 P 96680 H 102797 H 105388 H 105971 P 106057 P 107807 P 116...
output:
1212175277 8
result:
ok 2 lines
Test #5:
score: 0
Accepted
time: 28ms
memory: 19964kb
input:
1000000000 100000 200000 3068 H 3087 P 3106 H 33031 H 33037 P 33043 H 52370 H 52394 P 52418 H 62996 H 63067 P 63138 H 66040 H 66133 P 66226 H 71350 H 71351 P 71352 H 91852 H 91883 P 91914 H 105924 H 105969 H 105971 P 106018 H 106057 P 106145 H 116361 H 116385 P 116409 H 126036 H 126084 P 126132 H 12...
output:
4978306 463697368
result:
ok 2 lines
Test #6:
score: 0
Accepted
time: 46ms
memory: 20644kb
input:
1000000 150000 200000 2 H 3 H 6 H 8 H 16 P 17 H 19 P 20 P 21 P 24 H 28 H 33 H 37 P 38 H 40 H 44 P 48 H 49 P 58 P 59 P 60 H 62 P 65 P 70 H 72 H 76 P 77 H 79 P 84 P 93 H 96 P 101 H 104 H 106 P 110 H 111 P 112 H 116 H 124 P 125 H 126 H 127 H 128 P 134 H 135 P 137 P 138 P 140 H 142 H 145 H 146 H 147 H 1...
output:
1203722 86861366
result:
ok 2 lines
Test #7:
score: 0
Accepted
time: 42ms
memory: 21088kb
input:
1000000000 199999 200000 966788248 H 966788251 P 966788252 H 966788254 P 966788255 H 966788260 P 966788261 H 966788263 P 966788267 H 966788275 P 966788278 H 966788279 P 966788288 H 966788291 P 966788298 H 966788304 P 966788305 H 966788308 P 966788309 H 966788317 P 966788326 H 966788334 P 966788342 H...
output:
1098446 4586
result:
ok 2 lines
Test #8:
score: 0
Accepted
time: 34ms
memory: 19836kb
input:
10000000 137967 139896 52 P 101 H 106 P 149 P 158 P 190 P 258 P 338 P 349 P 350 P 457 P 486 P 500 P 509 P 517 P 563 P 568 P 630 P 723 P 738 P 801 P 819 P 859 P 872 P 885 P 900 P 972 P 1004 P 1034 P 1087 P 1183 P 1236 P 1245 P 1268 P 1436 H 1481 P 1486 P 1511 P 1544 P 1607 P 1647 P 1685 P 1798 P 1819...
output:
317845182248 2
result:
ok 2 lines
Test #9:
score: 0
Accepted
time: 29ms
memory: 19292kb
input:
400000 137967 139896 1 P 2 H 3 P 4 P 5 P 6 P 9 P 10 P 11 P 15 P 16 P 17 P 18 P 19 P 20 P 22 P 23 P 24 P 26 P 27 P 28 P 29 P 31 P 32 P 33 P 34 P 35 P 36 P 37 P 39 P 40 P 45 P 47 P 48 P 49 H 51 P 52 P 53 P 56 P 57 P 58 P 60 P 61 P 62 P 63 P 64 P 65 P 68 P 71 P 72 P 73 P 74 H 75 P 76 P 77 P 78 P 79 P 8...
output:
12717669314 562027925
result:
ok 2 lines
Test #10:
score: 0
Accepted
time: 44ms
memory: 21204kb
input:
1000000000 199000 200000 526190 H 526213 P 526214 H 526299 P 526309 H 526316 P 526351 H 526355 P 526370 H 526400 P 526482 H 526545 P 526569 H 526573 P 526641 H 526658 P 526707 H 526790 P 526838 H 526844 P 526868 H 526967 P 526975 H 527032 P 527097 H 527154 P 527213 H 527278 P 527299 H 527367 P 52743...
output:
9896423 922405585
result:
ok 2 lines
Test #11:
score: 0
Accepted
time: 41ms
memory: 21088kb
input:
1000000000 199950 200000 5239074 H 5239076 P 5239077 H 5239078 P 5239079 H 5239080 P 5239081 H 5239083 P 5239084 H 5239085 P 5239086 H 5239087 P 5239088 H 5239090 P 5239092 H 5239093 P 5239094 H 5239095 P 5239097 H 5239099 P 5239101 H 5239102 P 5239103 H 5239104 P 5239105 H 5239106 P 5239107 H 52391...
output:
299836 463541155
result:
ok 2 lines
Test #12:
score: 0
Accepted
time: 41ms
memory: 21084kb
input:
1000000000 199500 200000 244421 H 244423 P 244424 H 244425 P 244426 H 244427 P 244428 H 244430 P 244431 H 244432 P 244433 H 244434 P 244435 H 244437 P 244439 H 244440 P 244441 H 244442 P 244444 H 244446 P 244448 H 244449 P 244450 H 244451 P 244452 H 244453 P 244454 H 244455 P 244456 H 244458 P 24446...
output:
298242 524810405
result:
ok 2 lines
Test #13:
score: 0
Accepted
time: 31ms
memory: 19288kb
input:
400000 148599 151281 2 P 3 P 5 P 6 P 7 P 8 P 9 P 10 P 11 P 12 P 13 P 14 P 15 P 16 P 17 P 18 P 19 P 22 P 23 P 25 P 30 P 31 P 32 P 33 H 34 P 35 P 36 P 38 P 39 P 40 P 41 P 43 P 45 P 47 P 49 P 50 P 51 P 53 P 54 P 55 P 57 P 58 P 60 H 61 P 62 H 65 P 67 P 68 P 69 P 70 P 71 P 72 P 73 P 74 P 77 P 78 P 79 P 8...
output:
13764808569 268118240
result:
ok 2 lines
Test #14:
score: 0
Accepted
time: 32ms
memory: 20200kb
input:
1000000000 149183 174434 2 H 6 P 10 H 12 H 13 H 14 H 18 P 21 P 23 H 24 H 25 H 30 H 32 H 35 H 37 P 39 P 41 H 53 P 57 H 61 P 62 P 63 P 65 H 66 P 67 H 71 P 73 H 74 P 75 P 76 H 78 H 79 H 80 H 82 P 83 P 84 H 85 H 93 H 95 H 96 P 99 H 107 P 108 P 109 P 111 H 112 P 116 H 118 P 119 H 120 P 121 P 123 H 124 P ...
output:
1788748 930867409
result:
ok 2 lines