gyouzasushi’s diary

競プロとか

日立製作所 社会システム事業部 プログラミングコンテスト2020に参加しました。

成績

2完で490位でした…。

f:id:gyouzasushi:20200309094217p:plain

レートは微増。申し訳ねえ〜〜

f:id:gyouzasushi:20200309094338p:plain

A - Hitachi String

前から2文字ずつ見て、"hi"以外が来たら"No"を出力、としました。長さ10以下のhitachi文字列は"hi", "hihi", "hihihi", "hihihihi", "hihihihihi"の5つしかないので、Sがこれらと一致するか直接調べた方が楽かも。

提出

B - Nice Shopping

割引券を使わなくてもよいことに注意です。入力が多くて大変ですが、頑張ります。

提出

C - ThREE

解説AC。

pのかわりに、pの各項を3で割った余りを求めることにします。このとき求めるpは、「頂点iと頂点jの距離が3ならば、(p_i,p_j) \neq (1,1)かつ(p_i,p_j) \neq (2,2)」となるpです。

頂点iと頂点jの距離が3となるための条件を考えると、これは適当な頂点を根としたとき、二つの頂点の「深さ」の差が1または3になることだとわかります(距離が3となるとき、iからjへの最短経路は上上下、下下上、上上上、下下下のいずれかなので)。よって、深さの偶奇が異なる任意の頂点の組(i,j)について(p_i,p_j) \neq (1,1)かつ(p_i,p_j) \neq (2,2)となるようなpが構築できれば、これは条件を満たします(ここまでは正しい)。そしてそのようなpは、頂点iの深さが偶数ならp_i = 1、奇数ならp_i = 2とし、残りを0で埋めることで構築できそうです!!!!!!

f:id:gyouzasushi:20200309105242p:plain


そんな〜。

最後までWAが取れないままコンテストが終了。解説によると、深さが奇数の頂点、偶数の頂点のどちらかが極端に少ないとき、上記の構築方法ではうまくいかないようです。逆にそのようなときは、少ない方の頂点全てに0を割り当てれば条件を満たします。なるほど…。

コンテスト後の提出

反省

  • 行き詰まったときは思いつく限りのケースを試してみる