arc157 Aの勉強

この内容はhttps://atcoder.jp/contests/arc157/editorial/5781を参考にした。


XXの個数をA個、XYをB個、YXをC個、YYをD個とする。まず初めの文字とと終わりの文字を決めて考える。考えるのは次の4つとなる。

例えばX..YのときB-C=1となる(XYXYなど)。逆の場合Y..XではB-C=-1となる(YXYXなど)。つまり|B-C|=1のとき。  (1)

次にX...Xの場合は例えばXYXなどB-C=0となる。  (2)

他の場合はB=C=0がある(例えばXXXXX)。つまりD=0のとき(YYYYではA=0)。   (3)

最後にY...Yのときは(2)、(3)をXとY入れ替えればよく、B-C=0,B=C=0となる。(1)から(3)はどの場合でも先頭もしくは最後のX,YにA-1,D-1個X,Yをつければ文字列が完成する。-1がつくのは先頭もしくは最後にすでにX,Yがあるからである。
あとは|B-C|<=1のときYesでif文で場合分けすれば良い。

 

考え方
・まず最初と最後の文字を決めて考える。
・AとDの値は大事でなくB,Cに着目する。

 

https://atcoder.jp/contests/arc157/submissions/39158723の実装例について調べたこと。
#include<stdio.h>は標準入力のライブラリ。
#include<stdlib.h>はabs(絶対値)を使うために必要 。
scanf("%d %c ....",&変数名, .....)で入力ができる。%dはintで%cがchar。
fflush(stdout)はストリームにあるデータを吐き出すもの。printfなどの出力は直接ファイルやコンソール画面に出力するのではなくストリームに出力されてからコンソール画面などに出力される。ストリームを経由するので通常の場合は画面に出力されるのにラグがあるがfflush(stdout)を使うとすぐにストリームから画面に出力される。参考:https://daeudaeu.com/fflush/