cmat日記(競技プログラミングその他)

AtCoderはじめました (id: cmat)

ABC-D 69-71

 

今日は3問だけ。

 
ABC69
 
縦に並べていって、なくなったら横にずれてまた縦に逆方向。
1 2 3 5 5 
1 2 4 4 6
2 2 4 4 6
 
塗る順で1Dに書くと 1 1 2 2 2 2 3 4 4 4 4 5 5 6 7
ai個のiを順に1Dに書いて、2Dになるように読み出せばいい。
 
    rep(i,h*w){
        if(i/h %2==0){
            ans[i%h][i/h] = color[i];
        }else{
            ans[h-1- i%h][i/h] = color[i];
        }
    }
 
 
 
ABC70
 
K始点でダイクストラしてdist[a]+dist[b]するだけ。
 
 
 
ABC71
 
 
左から i 列目がどうなっているか。
i-1が横向きドミノの二列目で
 
a
b
 
のとき、右側にあり得るのは
 
ac
bc
 
abb
baa
 
acc
baa
 
abb
 
の4通りで、後ろ3つは色の入れ替えで同値。
 
a
a
 
の時
 
ab
ab
 
ac
ac
 
abb
acc
 
acc
abb
 
の4通りで、前2つ、後ろ2つはそれぞれ同値。
 
横ドミノ1列目だったらそのまま。
 
結局i+1列目の塗り方は、
i 列目が横1ならi列目までと同じ。
i 列目が横2でi+1列目が縦ならi列目までと同じ。
i 列目が横2でi+1列目が横ならi列目まで*3
i 列目が縦でi+1が横なら *2
i 列目が縦でi+1が縦なら *2
 
0列目については、横なら6通りで縦なら3通り。