AGC022: A - Diverse Word

問題

A - Diverse Word

解説

サンプルが親切で考慮すべきパターンを網羅している。 文字列Sに現れていない文字があれば、そのうち最小の文字を末尾に付け足せば良い。

すべての文字が現れていた場合、入力例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";
  }
}