けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

JOI 一次予選 2023 (第 2 回) C - 繰り返し文字列 (7Q, 難易度 1)

for 文の練習問題!

問題概要

英小文字からなる長さ  N の文字列  S が与えられる。 N は偶数である。

 S が「同じ文字列を 2 回繰り返したもの」であるかどうかを判定せよ。

制約

  •  2 \le N \le 100

考えたこと

文字列  S を前後で半分に割ると  N/2 文字ずつになる。よって、次のことを満たすかどうかを判定すればよい。

  •  S の 0 文字目と、 N/2 文字目が一致するか
  •  S の 1 文字目と、 1 + N/2 文字目が一致するか
  •  S の 2 文字目と、 2 + N/2 文字目が一致するか
  • ...
  •  S N/2 - 1 文字目と、 (N/2-1) + N/2 文字目が一致するか

for 文で実装できる。

コード

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

int main() {
    int N;
    string S;
    cin >> N >> S;

    bool res = true;
    for (int i = 0; i < N/2; ++i) {
        if (S[i] != S[i+N/2]) res = false;
    }

    if (res) cout << "Yes" << endl;
    else cout << "No" << endl;
}