Skip to content

Commit 815be30

Browse files
committed
add better solution to old task to test gpt-4
1 parent 5305b9e commit 815be30

1 file changed

Lines changed: 84 additions & 0 deletions

File tree

contests/icpc/acm2018/5_new2.cpp

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <algorithm>
4+
#include <sstream>
5+
6+
using namespace std;
7+
8+
void test(string str) {
9+
string* str1 = new string(str);
10+
istringstream* iss = new istringstream(*str1);
11+
cin.rdbuf(iss->rdbuf());
12+
}
13+
14+
vector<vector<bool>> is_filled;
15+
vector<vector<bool>> is_delete; // is_delete[i][j] означает, можно ли удалить символы с i по j в строке
16+
string str;
17+
bool get_can_delete(int i, int j) {
18+
if (i > j) throw exception();
19+
if (is_filled[i][j]) return is_delete[i][j];
20+
if (i == j) return false;
21+
22+
auto len = j - i + 1;
23+
24+
bool result = false;
25+
if (str[i] == str[j]) {
26+
if (len == 2 || len == 3) result = true;
27+
if (len >= 4) result |= get_can_delete(i+1, j-1);
28+
if (len >= 5) {
29+
result |= get_can_delete(i+1, j-2);
30+
result |= get_can_delete(i+2, j-1);
31+
for (int k = i+1; k < j-2; ++k) {
32+
if (get_can_delete(i+1, k) && get_can_delete(k+2, j-1)) {
33+
result = true;
34+
break;
35+
}
36+
}
37+
}
38+
}
39+
for (int k = i; k < j; ++k) {
40+
if (get_can_delete(i, k) && get_can_delete(k+1, j)) {
41+
result = true;
42+
break;
43+
}
44+
}
45+
46+
is_filled[i][j] = true;
47+
is_delete[i][j] = result;
48+
return result;
49+
}
50+
51+
int findMax(void) {
52+
vector<int> max_pos(str.size(), 0);
53+
for (int i = 0; i < str.size(); ++i) {
54+
int end = str.size() - 1;
55+
int pos = end - i;
56+
if (get_can_delete(pos, end))
57+
max_pos[pos] = i+1;
58+
else {
59+
if (pos != end) max_pos[pos] = max_pos[pos+1];
60+
for (int j = 0; j < i; ++j) {
61+
if (get_can_delete(pos, pos + j)) {
62+
max_pos[pos] = max(max_pos[pos], j+1 + max_pos[pos + j+1]);
63+
}
64+
}
65+
}
66+
}
67+
return max_pos[0];
68+
}
69+
70+
int main() {
71+
//test("abcdccb");
72+
//test("abbccad");
73+
//test("abcdcba");
74+
//test("aaaerttew");
75+
//test("cbcettre");
76+
test("hhaghaeahhhibihcffhecehcgahdabaahcdfghgfdbgadjdh"); // ответ 8
77+
// test("awwbereare"); // ответ 2
78+
//test("faaghbfdahgeeheddcedfcgabdecgadgefeaachdecbbhgedgeabegdedaefdbfgcdcaeccaafahhfhbdgdhfhdhdbgdfffdbfafhaafchabacedgdfhdddafgebbacdcheededdbfgddbfcaccghggbbedhcbbgfdhggheabebeaagddgcgafahggfebfbcbccgbdebhdeehhchfahdbdcccghecdhbfeehehgdebhhbfddeafdbghffecehhcbdgcbhbfdgbgdchddagafgbbefahhhchcccbdfdcagcebbbcghdbbedbhfcddhehfddachfbdgafgbebadfccagdedaggcehffbgdfeehbadegcadccdgbfehgdghhfdebadhhbgafgefgdgddahghdegggagfhgbeceddegegfcceeceffgfdhbhfcfghfeehfedchfhchchgcedbebbhbgebgceceagcecfahhgdecefhacdcddbaghfceecggahhagafhccegeghchcaedahdhfehgbedddaghcccdhcfagafbefhgafeebdggcchhedabhccgdcaadfhbdccabddfggdhdacdbadfddbcbfacdhgdfcabahagcchgbafgcabgbahededhahedabaaaeeeghhdcefhbhaghbedbabdgfcadehchgbgecdhhachcaacaafefagbdghffaadabfdhedeehbccfbdcacabbbbaadbfchfdehccabgghdfehfggbhhghecbheebfbhfcefegdgfccaacedghhgebaegcbgcafgfeaabghbefbaacgggbeehbecfaheeefcadaecfgfchchfcccbafgeddagccebfhbhchfbhhbdhffadaghhbedfghcfgghaeedcacfceffddbhgcdccgdahdcabhbbchfadgcahddcfcaefgbgfehbbdcdggfhfaafgaefhhhdcebgcefccdc"); // ответ 175
79+
80+
cin >> str;
81+
is_filled = vector<vector<bool>>(str.size(), vector<bool>(str.size(), false));
82+
is_delete = vector<vector<bool>>(str.size(), vector<bool>(str.size(), false));
83+
cout << str.size() - findMax();
84+
}

0 commit comments

Comments
 (0)