OilDrum's PLAYGROUND

どらむかんのゲーム日記サイト

当サイトの記事にはプロモーションが含まれています。

ABC398 - A - Doors in the Center

最終更新:2025-04-04 投稿日:2025-04-04

2025/03/22に行われたユニークビジョンプログラミングコンテスト2025 春(AtCoder Beginner Contest 398)のA問題の解法についての記事です。

考えたこと

条件を満たす文字列を長さの短い方から書き出してみると、
===-=--==---=----==--、……
のようになっています。これらについて、=-の個数に着目すると、
=について、\( N \)が奇数のとき=は1個、\( N \)が奇数のとき=は2個
-について、\( N \)に対して左右に\({\lfloor {(N - 1)} / {2} \rfloor} \)個ずつ
となっています。

ここまで分かれば、for文とif文を用いて実装できそうです。

コードの例

#include <bits/stdc++.h>using namespace std;int main() {  int N;  cin >> N;  for (int i = 0; i < (N - 1) / 2; i++) {    cout << '-';  }  if (N % 2 == 1) {    cout << "=";  } else {    cout << "==";  }  for (int i = 0; i < (N - 1) / 2; i++) {    cout << '-';  }    return 0;}

解法

forの書き方が正しいか迷いそうなら、
for (int i = 1; i <= (N - 1) / 2; i++) {
とした方が分かりやすいかもしれません。

あとは偶奇を調べるのにお決まりの% 2で分岐させれば素直に実装できます。