| Task: | Hiitdromes |
| Sender: | solosolve |
| Submission time: | 2025-11-08 15:08:22 +0200 |
| Language: | C++ (C++20) |
| Status: | READY |
| Result: | WRONG ANSWER |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.01 s | details |
| #2 | ACCEPTED | 0.01 s | details |
| #3 | ACCEPTED | 0.01 s | details |
| #4 | ACCEPTED | 0.01 s | details |
| #5 | ACCEPTED | 0.01 s | details |
| #6 | ACCEPTED | 0.01 s | details |
| #7 | ACCEPTED | 0.01 s | details |
| #8 | ACCEPTED | 0.01 s | details |
| #9 | ACCEPTED | 0.01 s | details |
| #10 | ACCEPTED | 0.01 s | details |
| #11 | ACCEPTED | 0.01 s | details |
| #12 | ACCEPTED | 0.01 s | details |
| #13 | ACCEPTED | 0.01 s | details |
| #14 | ACCEPTED | 0.01 s | details |
| #15 | WRONG ANSWER | 0.01 s | details |
| #16 | ACCEPTED | 0.02 s | details |
| #17 | ACCEPTED | 0.02 s | details |
| #18 | ACCEPTED | 0.02 s | details |
| #19 | ACCEPTED | 0.01 s | details |
| #20 | ACCEPTED | 0.01 s | details |
| #21 | ACCEPTED | 0.01 s | details |
Code
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int MAX_N = 1e3 + 23;
const int INF = 1e9;
int dp[MAX_N][MAX_N];
string s;
bool check_symbol(char c)
{
return (c == 'H') || (c == 'I') || (c == 'T');
}
int calc_dp(int l, int r)
{
if (dp[l][r] != INF)
return dp[l][r];
if (l > r)
{
dp[l][r] = INF;
assert(false);
return dp[l][r];
}
if (l == r)
{
dp[l][r] = (!check_symbol(s[l]));
return dp[l][r];
}
if ((l + 1) == r)
{
if ((!check_symbol(s[l])) && (!check_symbol(s[r])))
dp[l][r] = 2;
else if (s[l] == s[r])
dp[l][r] = 0;
else
dp[l][r] = 1;
return dp[l][r];
}
dp[l][r] = INF;
// Add a new symbol after s[r] that equals to s[l]
if (l + 1 <= r)
{
int extra = 0;
if (!check_symbol(s[l]))
extra = 2;
else
extra = 1;
dp[l][r] = min(dp[l][r], calc_dp(l + 1, r) + extra);
}
// Delete symbol s[r]
if (l <= r - 1)
dp[l][r] = min(dp[l][r], calc_dp(l, r - 1) + 1);
// Replace symbol s[r] by symbol that equals to s[l]
if ((l + 1) <= (r - 1))
{
int extra = 0;
if ((!check_symbol(s[l])) && (!check_symbol(s[r])))
extra = 2;
else if (s[l] == s[r])
extra = 0;
else
extra = 1;
dp[l][r] = min(dp[l][r], calc_dp(l + 1, r - 1) + extra);
}
assert(dp[l][r] != INF);
return dp[l][r];
}
int main()
{
ios_base::sync_with_stdio(false);
int n;
cin >> n;
cin >> s;
for (int i = 0; i < MAX_N; i++)
for (int j = 0; j < MAX_N; j++)
dp[i][j] = INF;
int answer = calc_dp(0, n - 1);
cout << answer << '\n';
return 0;
}
Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 6 HEITTO |
| correct output |
|---|
| 3 |
| user output |
|---|
| 3 |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 1 I |
| correct output |
|---|
| 0 |
| user output |
|---|
| 0 |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 1 A |
| correct output |
|---|
| 1 |
| user output |
|---|
| 1 |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 1 O |
| correct output |
|---|
| 1 |
| user output |
|---|
| 1 |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 1 Z |
| correct output |
|---|
| 1 |
| user output |
|---|
| 1 |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 10 HHTTHITTIH |
| correct output |
|---|
| 2 |
| user output |
|---|
| 2 |
Test 7
Verdict: ACCEPTED
| input |
|---|
| 10 TTAHTHHAHT |
| correct output |
|---|
| 3 |
| user output |
|---|
| 3 |
Test 8
Verdict: ACCEPTED
| input |
|---|
| 10 BFUJMZSMZJ |
| correct output |
|---|
| 10 |
| user output |
|---|
| 10 |
Test 9
Verdict: ACCEPTED
| input |
|---|
| 10 WAZGWJNVGK |
| correct output |
|---|
| 10 |
| user output |
|---|
| 10 |
Test 10
Verdict: ACCEPTED
| input |
|---|
| 100 HIIIIHHHHHHTIHHHHIIIHHTITTHTTT... |
| correct output |
|---|
| 24 |
| user output |
|---|
| 24 |
Test 11
Verdict: ACCEPTED
| input |
|---|
| 100 TAHAIAITAIHHHITAHAHHIITTHAITTH... |
| correct output |
|---|
| 34 |
| user output |
|---|
| 34 |
Test 12
Verdict: ACCEPTED
| input |
|---|
| 100 EBARMESYLCNFAXNWYCWXSSCNXVWPDS... |
| correct output |
|---|
| 100 |
| user output |
|---|
| 100 |
Test 13
Verdict: ACCEPTED
| input |
|---|
| 100 ELTWGCNSAJXAXHACYSDJHRPZYMWXAE... |
| correct output |
|---|
| 87 |
| user output |
|---|
| 87 |
Test 14
Verdict: ACCEPTED
| input |
|---|
| 1000 TIHTTTTHTTITIITTIITIHIHTHTTIII... |
| correct output |
|---|
| 222 |
| user output |
|---|
| 222 |
Test 15
Verdict: WRONG ANSWER
| input |
|---|
| 1000 ITTITAHHAHTHIAAAIIHITIAHITHHIH... |
| correct output |
|---|
| 342 |
| user output |
|---|
| 352 |
Feedback: Incorrect character on line 1 col 2: expected "342", got "352"
Test 16
Verdict: ACCEPTED
| input |
|---|
| 1000 WVEPBCKVGYOAJVJSCEFXYAGNSOWZVL... |
| correct output |
|---|
| 1000 |
| user output |
|---|
| 1000 |
Test 17
Verdict: ACCEPTED
| input |
|---|
| 1000 FINBOIBDJSFERQEWBVYROECPSOESGJ... |
| correct output |
|---|
| 888 |
| user output |
|---|
| 888 |
Test 18
Verdict: ACCEPTED
| input |
|---|
| 1000 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA... |
| correct output |
|---|
| 1000 |
| user output |
|---|
| 1000 |
Test 19
Verdict: ACCEPTED
| input |
|---|
| 1000 HHHHHHHHHHHHHHHHHHHHHHHHHHHHHH... |
| correct output |
|---|
| 0 |
| user output |
|---|
| 0 |
Test 20
Verdict: ACCEPTED
| input |
|---|
| 1000 IIIIIIIIIIIIIIIIIIIIIIIIIIIIII... |
| correct output |
|---|
| 0 |
| user output |
|---|
| 0 |
Test 21
Verdict: ACCEPTED
| input |
|---|
| 1000 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTT... |
| correct output |
|---|
| 0 |
| user output |
|---|
| 0 |
