Yuulis.log

Yuulis.log

トンネルを抜けるとそこは参照エラーであった。

【AtCoder】ABC 381 A - 11/22 String | 茶コーダーが解くAtCoder

atcoder.jp

実行時間制限: 2 sec / メモリ制限: 1024 MB / Difficulty: 31

問題概要

文字列  T が以下の条件を全て満たすとき、 T を「11/22 文字列」と呼ぶ。

  •  |T| は奇数である。
  •  1 文字目から  \frac{|T|+1}{2} - 1 文字目までが1である。
  •  \frac{|T|+1}{2} 文字目が/である。
  •  \frac{|T|+1}{2} + 1 文字目から  |T| 文字目までが2である。

1, 2, /からなる長さ  N の文字列  S が与えられるので、  S が「11/22 文字列」であるか判定せよ。

制約

  •  1 \leq N \leq 100

考察

基本的には、「11/22 文字列」の条件に合致しているか上からチェックしていけばよい。

1つ目と3つ目はif文で、2つ目と4つ目はfor文を使って判定できる。コードを書く際は 0-indexed に注意。

コード

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

#define rep(i, start, end) for (auto i = (start); (i) < (end); (i)++)

// ======================================== //

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

    if (N % 2 == 0)
    {
        cout << "No" << endl;
        return 0;
    }

    rep(i, 0, N / 2)
    {
        if (S[i] != '1')
        {
            cout << "No" << endl;
            return 0;
        }
    }

    if (S[N / 2] != '/')
    {
        cout << "No" << endl;
        return 0;
    }

    rep(i, N / 2 + 1, N)
    {
        if (S[i] != '2')
        {
            cout << "No" << endl;
            return 0;
        }
    }

    cout << "Yes" << endl;

    return 0;
}

atcoder.jp

実装時間: 5分