当サイトの記事にはプロモーションが含まれています。
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で分岐させれば素直に実装できます。