AGC022: A - Diverse Word
問題
解説
サンプルが親切で考慮すべきパターンを網羅している。 文字列に現れていない文字があれば、そのうち最小の文字を末尾に付け足せば良い。
すべての文字が現れていた場合、入力例3のケース S = "zyxwvutsrqponmlkjihgfedcba" が最後の多彩な単語となり、この場合 -1 である。入力例3以外の文字列の場合、次の辞書順最小の文字列は next_permutation し、末尾の余計な文字列を切るようにした。理由はEditorialを参照。
int main() { string s; cin >> s; set<char> st; rep(i, s.size()) { st.insert(s[i]); } rep(i, 26) { if (!st.count('a' + i)) { cout << s << char('a' + i) << "\n"; exit(0); } } if (s == "zyxwvutsrqponmlkjihgfedcba") { cout << -1 << "\n"; } else { auto t = s; next_permutation(s.begin(), s.end()); rep(i, t.size()) { cout << s[i]; if (s[i] != t[i]) { break; } } cout << "\n"; } }