https://yukicoder.me/problems/no/927
解説
https://yukicoder.me/submissions/399615
2番目に大きいものとあるが、最も大きいものを考えてみる。
与えられた文字を降順で並べると、最大の数が得られる。
サンプル1にもあるように、最大の321の下2桁をスワップすると、2番目が得られる。
問題は9911のような場合である。
この場合は9191とするのが2番目。
なので、基本的には降順で並べて、下の桁から数の境目を探して、そこだけswapすると答え。
スワップした結果、最大と同じになったり、0-leading(0から始まる)数になったら-1
string X; //--------------------------------------------------------------------------------------------------- void _main() { cin >> X; sort(all(X), greater<char>()); string ans = X; int n = X.length(); rrep(i, n - 2, 0) if (ans[i + 1] != ans[i]) { swap(ans[i], ans[i + 1]); break; } if (ans == X or ans[0] == '0') cout << -1 << endl; else cout << ans << endl; }