我问了下chatgpt怎么写这道题
他给出的代码是
#include <iostream>
#include <string>
#include <algorithm>
#include <unordered_set>
using namespace std;
int n;
string m;
bool is_palindrome(const string &s) {
int n = s.size();
for (int i = 0; i < n / 2; ++i) {
if (s[i] != s[n - i - 1]) {
return false;
}
}
return true;
}
string add(const string &a, const string &b) {
string res;
int carry = 0;
int n = a.size(), m = b.size();
for (int i = 0; i < max(n, m); ++i) {
int x = i < n ? a[n - i - 1] - '0' : 0;
int y = i < m ? b[m - i - 1] - '0' : 0;
int z = x + y + carry;
res.push_back(z % n + '0');
carry = z / n;
}
if (carry) {
res.push_back(carry + '0');
}
reverse(res.begin(), res.end());
return res;
}
int bfs() {
unordered_set<string> visited;
visited.insert(m);
int step = 0;
while (!visited.empty() && step < 30) {
unordered_set<string> next;
for (const string &s : visited) {
if (is_palindrome(s)) {
return step;
}
string t = s;
reverse(t.begin(), t.end());
string u = add(s, t);
next.insert(u);
}
visited = move(next);
++step;
}
return -1;
}
int main() {
cin >> n >> m;
cout << (bfs() == -1 ? "Impossible!" : "STEP=" + to_string(bfs())) << endl;
return 0;
}
结果似乎WA了