题目链接:https://ac.nowcoder.com/acm/contest/13926/H
满水的一题, 比赛时写逼近前一项数时脑袋秀逗了,记录一下…
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string.h>
#include <algorithm>
#include <map>
using namespace std;
int main() {
int n;
cin >> n;
string s[10005];
for(int i = 0; i < n; ++i) {
cin >> s[i];
for(int j = 0; j < s[i].length(); ++j) {
if(s[i][j] == '9') s[i][j] = '6';
}
}
for(int i = 1; i < n; ++i) {
if(s[i].length() < s[i-1].length()) { //如果是长度小于前一个数,不可能;
cout << "impossible" << endl;
return 0;
}
if(s[i].length() > s[i-1].length()) continue; //如果长度大于前一个数,continue;
if(s[i] >= s[i-1]) continue;
else {
int l = s[i].length();
for(int j = 0; j < l; ++j) {
if(s[i][j] == '6') s[i][j] = '9';
}
if(s[i] < s[i-1]) { //如果仍比前一个数小, 不可能
cout << "impossible" << endl;
return 0;
}
else {
for(int k = 0; k < l; ++k) {
if(s[i][k] == '9') {
s[i][k] = '6';
if(s[i] < s[i-1]) {
s[i][k] = '9';
}
}
}
// for(int k = l-1; k >= 0; --k) {
// if(s[i][k] == '9') {
// s[i][k] = '6';
// if(s[i] < s[i-1]) {
// s[i][k] = '9';
// }
// }
// }
}
}
}
cout << "possible" << endl;
for(int i = 0; i < n; ++i) {
cout << s[i] << endl;
}
}