Official

B - Perfect String Editorial by PCTprobability


for 文のようなループ処理を用いてすべての条件を満たすかどうかを調べます。

全ての文字を見て、大文字があるかどうかを\(\mathrm{O}(|S|)\) で判定します。

同様に、全ての文字を見て、小文字があるかどうかを\(\mathrm{O}(|S|)\) で判定します。

\(1 \le i < j \le |S|\) を満たす整数の組 \(i,j\) に対して、\(S_i \neq S_j\) であるかどうかを \(\mathrm{O}(|S|^2)\) で判定します。

C++ であれば、大文字であるかどうかは ‘A’ <= s[i] && s[i] <= ‘Z’ や isupper 関数などを使えば判定できます。

実装例 (C++) :

#include <bits/stdc++.h>
using namespace std;
int main() {
  string s;
  cin >> s;
  bool big = false,small = false;
  for(int i = 0; i < s.size(); i++){
    if(isupper(s[i])) big = true;
    else small = true;
  }
  bool diff = true;
  for(int i = 0; i < s.size(); i++){
    for(int j = i + 1; j < s.size(); j++){
      if(s[i] == s[j]) diff = false;
    }
  }
  if(big && small && diff) cout << "Yes" << endl;
  else cout << "No" << endl;
}

posted:
last update: