Official

A - A to Z String 2 Editorial by nok0


プログラミングの学習を始めたばかりで何から手をつけるべきかわからない方は、まずは「practice contest」(https://atcoder.jp/contests/practice/) の問題A「Welcome to AtCoder」をお試しください。言語ごとに解答例が掲載されています。
また、プログラミングコンテストの問題に慣れていない方は、「AtCoder Beginners Selection」(https://atcoder.jp/contests/abs) の問題をいくつか試すことをおすすめします。
「競プロ典型 90 問」(https://atcoder.jp/contests/typical90) では、プログラミングコンテストで扱われる典型的な 90 問の問題に挑戦可能です。
「C++入門 AtCoder Programming Guide for beginners (APG4b)」(https://atcoder.jp/contests/APG4b) は、競技プログラマー向けのC++入門用コンテンツです。


問題文で言われた通りに文字列を作り、\(X\) 番目の文字を出力すれば良いです。

文字列を作る際には、末尾に \(1\) 文字ずつ追加していくのが簡単でしょう。これは c++ では push_back()、python では append() によって行えます。

\(X\) 番目の文字は、多くの言語では\(0\) - indexed(先頭の文字を \(0\) 番目、次の文字を \(1\) 番目、とする数え方) が採用されているため、 \(X\) からあらかじめ \(1\) を引いておき \(1\) -indexed から \(0\) - indexed に変換する必要があることに注意してください。

実装例(c++)

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n, x;
    cin >> n >> x;
    string s;
    for(int i = 0; i < 26; i++) {
        for(int j = 0; j < n; j++) {
            s.push_back('A' + i);
        }
    }
    x -= 1;
    cout << s[x] << endl;
}

実装例(python)

n, x = map(int, input().split())
s = []
for i in range(ord('A'), ord('Z') + 1):
    for j in range(n):
        s.append(chr(i))
print(s[x - 1])

また、実際に文字列を構築しないで解くことも出来ます。

\(X\)\(1,2,\ldots,N\) のときは A, \(X\)\(N+1,N+2,\ldots,2N\) のときは B,…, \(X\)\(25N + 1, 25N+2,\ldots,26N\) のときは Z が答えです。

これをそのまま実装するのは大変なので、割り算を使って工夫することを考えましょう。\(X-1\)\(26\) で割り、結果を切り捨てて得られる整数を \(Y\) とすると、\(Y=0\) のとき A, \(Y=1\) のとき B, …, \(Y=25\) のとき Z となっていることがわかると思います。

そのことから、A から \(Y\) 個進んだ文字を出力すれば良いです。

以下に c++ と python での実装を示します。

実装例(c++)

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n, x;
    cin >> n >> x;
    int y = (x - 1) / n;
    cout << char('A' + y) << endl;
}

実装例(python)

n, x = map(int, input().split())
print(chr(ord('A') + (x - 1) // n))

posted:
last update: