忍者ブログ

競プロ日記

競技プログラミングの問題を解いた感想を書きます。

[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

ABC150
問題

unrated

3完
新年初競プロ&新年初C++。
コンテスト前にABCのC問題までくらい1つ解いておこうと思ったが映画見てご飯食べてたら時間なくなった。

そして2連続unrated。
unratedに気づいた後色々あってやる気を失った。
unratedじゃなかったらたぶん4完。

色々書いたけどなんか記事消えたので適当。
保存する押して保存しましたのダイアログと共に消えるの頭おかしいだろ。
忍者ブログ本当に嫌。

A問題

かんたん。
チェック段階でkとxを2回間違えてチェックした。
焦りすぎ。

B問題

もしかしてcount関数ってStringに特殊化されて文字列も数えられる???と淡い期待を抱いて実行したら普通にコンパイルエラー。
素直にループ回した。

C問題

考察実装5分next_permutationの使い方調べるの5分。
なんとなくnext_permutationは順列を扱えるくらいしか知らなかったが、知ってるのは強いね。
初めて使ってみて勉強になった。

D問題

unratedの根源。
わざわざ問題文にa[i]は偶数と書いてあったのに奇数が紛れていたらしい。

「最小公倍数は整数をかける場合の最も小さい公倍数なので、整数+0.5をかける場合の最小の半公倍数は最小公倍数の半分。半公倍数の間隔は最小公倍数。」
という考察をコンテスト中にしたが、半分間違っていた。
「最小公倍数は整数をかける場合の最も小さい公倍数なので、整数+0.5をかける場合の最小の半公倍数になる可能性があるのは最小公倍数の半分。半公倍数が存在するなら間隔は最小公倍数。」
というのが正しい。

というのも、最小の公倍数をZとおくと、Z / a[i]が偶数になるa[i]が存在した場合、最小の半公倍数となる(Z / 2) / a[i]が整数となってしまい、X = a[i] * (p + 0.5)を満たせない。
間隔となる最小公倍数のn倍を足しても必ず満たさないので、半公倍数は存在しないことになる。

ということで、基本的には(Z / 2) + nZ {n:0以上の整数}が半公倍数の数で、答えとなるM以下のものの数は簡単に計算できるが、Z / a[i]が偶数となるa[i]が1つでも存在したら半公倍数は存在しない。

コンテスト中はTLE+WAで、色々改善してTLEはなくしたが、後半15個のWAがなくならなかった。
途中で間違えてEに提出してしまったり、そもそもunratedだったりと、WAは入力ミスが原因だろうと1時間くらいで解くのをやめた。
しかしコンテスト終了後に提出してもWAだった。
改めて考察し直してみると、Twitterで偶奇が云々という記述をいくつか見ていたのもあり、最後の偶奇のチェックが必要だとすぐに気付けた。
unratedで解くのをやめていなければ自力で気付けたと思うが、ちょっと時間かかってたかも。
それでも十分時間内に間に合ったとは思うが。

E問題

やる気はなかったが方針だけは途中まで立てた。
解説を見る限り基本的には合ってそう。
たぶんその先は時間内に思いつけない。

Σa[i] * b[j]を最小化するタイプの問題なので、昇順ソートと降順ソート同士でかけ合わせれば良い。
S[i]が異なっていると置くと、残りN-1個の選び方2^(N-1)の中でC[i]が何番目に大きいかが分かれば良い。

というのをぼーっと考えていたが、進まなかった。
部分問題まで辿り着けたのは成長だが、そろそろ先に進まないといけない頃合い。
後でしっかり解説読んで理解しよう。

F問題

やる気ない中でXORの文字を見つけたので読むのをやめた。

まとめ

1年がunratedで終わりunratedで始まるのはどうなんだAtCoder。
別に文句を言いたい気持ちは全然なくて、イメージ悪くない?大丈夫?という感じ。

明日明後日と3日連続でrated(予定)のコンテストがあるので参加したいのだが、いまいちモチベーションが上がらない。
ブログの移行が進んでいないのが大きい。
詰まった部分は大体解決していて、単純にやっていないからなので頑張ろう。

保存しましたで消えるの本当に頭おかしいから早く移行したい。
・・・本当に頑張ろう。
PR

コメント

コメントを書く