思路很直球,相似的部分复制粘贴5分钟写完,结果80pts #1写炸了(悲 求调
#include <iostream>
#include <queue>
#include <string>
#include <map>
#include <cmath>
using namespace std;
typedef long long ll;
struct node {
string s;
ll sum;
};
queue<node> Q;
map<string, int> M;
string st = "12345";
ll S, flag;
int check() {
S = (st[0] - '0') * 10000 +
(st[1] - '0') * 1000 +
(st[2] - '0') * 100 +
(st[3] - '0') * 10 +
(st[4] - '0') * 1;
flag = 1;
for (int i = 2; i <= sqrt(S); i++) {
if (S % i == 0) {
flag = 0;
}
}
return flag;
}
int main() {
string s;
cin >> s;
st = s;
if (check()) {
cout << s;
return 0;
}
Q.push((node){s, 0});
ll t1;
while (Q.size()) {
t1 = Q.front().sum;
s = Q.front().s;
st = s;
if (st[0] != '9') {
st[0] = st[0] + 1;
} else {
st[0] = '0';
}
if (!M[st]) {
M[st] = 1;
if (check()) {
cout << st;
return 0;
}
Q.push((node){st, t1 + 1});
}
st = s;
if (st[1] != '9') {
st[1] = st[1] + 1;
} else {
st[1] = '0';
}
if (!M[st]) {
M[st] = 1;
if (check()) {
cout << st;
return 0;
}
Q.push((node){st, t1 + 1});
}
st = s;
if (st[2] != '9') {
st[2] = st[2] + 1;
} else {
st[2] = '0';
}
if (!M[st]) {
M[st] = 1;
if (check()) {
cout << st;
return 0;
}
Q.push((node){st, t1 + 1});
}
st = s;
if (st[3] != '9') {
st[3] = st[3] + 1;
} else {
st[3] = '0';
}
if (!M[st]) {
M[st] = 1;
if (check()) {
cout << st;
return 0;
}
Q.push((node){st, t1 + 1});
}
st = s;
if (st[4] != '9') {
st[4] = st[4] + 1;
} else {
st[4] = '0';
}
if (!M[st]) {
M[st] = 1;
if (check()) {
cout << st;
return 0;
}
Q.push((node){st, t1 + 1});
}
st = s;
if (st[4] != '0') {
st[4] = st[4] - 1;
} else {
st[4] = '9';
}
if (!M[st]) {
M[st] = 1;
if (check()) {
cout << st;
return 0;
}
Q.push((node){st, t1 + 1});
}
st = s;
if (st[3] != '0') {
st[3] = st[3] - 1;
} else {
st[3] = '9';
}
if (!M[st]) {
M[st] = 1;
if (check()) {
cout << st;
return 0;
}
Q.push((node){st, t1 + 1});
}
st = s;
if (st[2] != '0') {
st[2] = st[2] - 1;
} else {
st[2] = '9';
}
if (!M[st]) {
M[st] = 1;
if (check()) {
cout << st;
return 0;
}
Q.push((node){st, t1 + 1});
}
st = s;
if (st[1] != '0') {
st[1] = st[1] - 1;
} else {
st[1] = '9';
}
if (!M[st]) {
M[st] = 1;
if (check()) {
cout << st;
return 0;
}
Q.push((node){st, t1 + 1});
}
st = s;
if (st[0] != '0') {
st[0] = st[0] - 1;
} else {
st[0] = '9';
}
if (!M[st]) {
M[st] = 1;
if (check()) {
cout << st;
return 0;
}
Q.push((node){st, t1 + 1});
}
Q.pop();
}
return 0;
}