# Gori#016(ABC036)
# B - 回転
# 概要
の文字列を90度回転させて出力せよ.
# 解法
- の入力をに変換してやれば良い.
- 出力部分は以下の通り.
for(int wi=0;wi<n;++wi){
  for(int hi=n-1;hi>=0;++hi){
    cout << s[hi][wi];
  } 
  cout << endl;
}       
# C - 座圧
# 概要
- が与えられた時, 座圧した結果の文字列に変換して出力せよ.
- e.g.)
- 3 3 1 6 1
- ->
- 1 1 0 2 0
# 解法
ソートして1から割り振ればよい.
が, これは長いので, std::mapを用いた公式解にしてみる.
- mapに,...,をキーとして追加 
- mapではキーが小さい方から - 0, ..., nを割り当てる
- mapのa_1, ..., a_nを参照する. 
# D - 塗り絵
# 概要
- 個の島が本の橋で繋がっている.
- この時, 各島を白と黒を使って色塗りする時の塗り方は何通りか?
- ただし, 橋の両端の島が黒になってはならない.
# 解法
Editorialに沿って解く.
頂点, 辺なので, このグラフは木であることがわかる.
その上で, 木の任意の頂点の通り数を, その頂点の子の通り数を用いて表したい( DPの漸化式を作りたい)
を以下のように定義する.
 頂点を根とする部分木を白と黒で塗る時の通り数.
(ここで, 頂点は白でも黒でも良い)
頂点を根とする部分木を白と黒で塗る時の通り数. (ただし, 頂点は黒でなければならない)
# 頂点が白の時
頂点が白だった時を考える.
頂点が白の時, その子は白でも黒でも良い.
したがって, 頂点の子をとすると,
この時の頂点の通り数は, となる.
この式の意味は, 具体的に書き出してみれば分かるので, そこは紙にでも書いてみると良いと思う.
# 頂点が黒の時
頂点が黒だった時を考える.
頂点が黒の時, その子は白でなければならない( 題意).
したがって, 頂点の子をとすると,
この時の頂点の通り数は, となる.
# 一般化
この上で, 頂点の色の指定がないは以下のように定義できる.
 
また, 頂点が黒と指定されているは, 子が全て白と確定しているため, 以下のように定義できる.
 
を用いると, $f(x)はさらに短くでき, 一般化した式は以下のようになる.
これを実装すればよい.
お疲れ様でした.