ABC007 B - 辞書式順序

Calendar Clock iconCalendar Clock icon

atcoder

目次

# 問題

https://atcoder.jp/contests/abc007/tasks/abc007_2

文字列SSが1つ与えられて辞書順でSSよりも小さい文字列のうち1つどれでも良いので答える問題です.

辞書順とは、文字列の文字を先頭から1つずつ比べていって初めて異なっていた文字がa - zで早い方を「小さい」とする順序です.
先頭からすべての文字が同じでどちらかの文字列が終端に達した場合先に終端に達した短い方の文字列を「小さい」とします.

# 入力

S
  • S - 小文字英数字からなる長さ1以上11以下の文字列

# 出力

T

# 入出力例

xyz
xy

# 解説

問題をよく考えてみると実は答えは2パターンしかないことが分かります.
入力がaだった場合、それより小さい文字列は無いので-1が答えです.
それ以外の場合aが答えです.

辞書順で小さいもののうちどれでも良いので1つ答えれば良いので、辞書順最小のaを答えておけば安心というわけです.

# 計算量

O(1)O(1)

# 解答

// C++ 14
#include <iostream>
#include <string>
#include <vector>
#include <list>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <unordered_map>
#include <math.h>

#define ll long long
#define Int int
#define loop(x, start, end) for(Int x = start; x < end; x++)
#define loopdown(x, start, end) for(int x = start; x > end; x--)
#define rep(n) for(int x = 0; x < n; x++)
#define span(a,x,y) a.begin()+x,a.begin()+y
#define span_all(a) a.begin(),a.end()
#define len(x) (x.size())
#define last(x) (*(x.end()-1))

using namespace std;
string S;

void input() {
  cin >> S;
}

void solve() {
  if (S.length() == 1 && S[0] == 'a') {
    cout << -1 << endl;
    return;
  }

  cout << 'a' << endl;
}

int main() {
  input();
  solve();
  return 0;
}

リモートフリーランス。ウェブサービス、スマホアプリエンジニア。
東アジアを拠点に世界を移動しながら活動してます!

お仕事のご依頼・お問い合わせはこちら

コメント