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