hiro1729 競プロ

競プロの解説などを書きます。

ABC338-A 解説

A - Capitalized?

問題文の通りに判定します。大文字かどうか、小文字かどうかはそれぞれisupper、islowerなどで判定できます。

S = input()
print("Yes" if S[0].isupper() and all(i.islower() for i in S[1:]) else "No")
#include <bits/stdc++.h>
using namespace std;

int main() {
    string S;
    cin >> S;
    bool ok = true;
    if (!isupper(S[0])) {
        ok = false;
    }
    for (char i: S.substr(1)) {
        if (!islower(i)) {
            ok = false;
        }
    }
    cout << (ok ? "Yes" : "No") << '\n';
}
import strutils, sequtils
let S = stdin.readLine
echo:
  if S[0].isUpperAscii and S[1..<len(S)].allIt(it.isLowerAscii):
    "Yes"
  else:
    "No"

また、言語によっては文字列をcapitalizeする関数もあります。

S = input()
print("Yes" if S.capitalize() == S else "No")
import strutils, unicode
let S = stdin.readLine
echo if S.toLower.capitalize == S: "Yes" else: "No"

istitleは文字列のすべての単語がcapitalizeされているかどうかを判定する関数で、今回の場合はスペースが文字列に含まれていないので使うことができます。

S = input()
print("Yes" if S.istitle() else "No")

また、文字列は比較ができるので、isupperなどを知らなくても解けます。

S = input()
print("Yes" if S[0] <= "Z" and all(i >= "a" for i in S[1:]) else "No")
#include <bits/stdc++.h>
using namespace std;

int main() {
    string S;
    cin >> S;
    bool ok = true;
    if (S[0] > 'Z') {
        ok = false;
    }
    for (char i: S.substr(1)) {
        if (i < 'a') {
            ok = false;
        }
    }
    cout << (ok ? "Yes" : "No") << '\n';
}
import strutils, sequtils
let S = stdin.readLine
echo:
  if S[0] <= 'Z' and S[1..<len(S)].allIt(it >= 'a'):
    "Yes"
  else:
    "No"