競技プログラミング用 知識集積所
ABC427A - ABC → AC
最終更新:
sport_programming
-
view
問題
必要知識
考え方
1文字だけ消して出力するということだが、実は本当に削除する必要はない。
何かの操作をしたあとで、結果として真ん中の1文字だけ消えた文字列ができていればよい。
何かの操作をしたあとで、結果として真ん中の1文字だけ消えた文字列ができていればよい。
そこで、受け取った文字列を別の文字列にforループで1文字ずつ順番にコピーしながら、真ん中の文字だけコピーしないことを考える。
そうすれば、コピー先は目的の文字列になっているはずである。
そうすれば、コピー先は目的の文字列になっているはずである。
ということで、if分岐で「真ん中の文字でなければ」という条件をつけてコピーする。
これは、全体が3文字なら真ん中は1文字目、5文字なら2文字目、7文字なら3文字目、と考えると、文字数を2で割った切り捨てが真ん中の位置を表すことができるとわかる。
よって、「今の文字数!=全体の文字数/2」を条件にすればよい。
コピー自体は、用意した空の文字列に「+」を使って結合していけばよい。
これは、全体が3文字なら真ん中は1文字目、5文字なら2文字目、7文字なら3文字目、と考えると、文字数を2で割った切り捨てが真ん中の位置を表すことができるとわかる。
よって、「今の文字数!=全体の文字数/2」を条件にすればよい。
コピー自体は、用意した空の文字列に「+」を使って結合していけばよい。
最後に、コピー先にできた文字列をcoutで出力しておしまい。
解答例
注意点
文字数は、0始まりなので注意。
atcoderの場合、aが0文字目、tが1文字目、などである。
真ん中は4文字目ではなく3文字目。
真ん中は4文字目ではなく3文字目。