投稿

5月, 2022の投稿を表示しています

AtCoderで水色になったので雑感のまとめ

イメージ
AtCoderをやっているからには色変記事というものを書きたかったのだが、以前水色に到達したときはすぐに落ちてしまったのでタイミングを逃していた。ようやくまた水色になったので記事にまとめてみる。 レート遷移 こんな感じ。緑にはすぐなれたけど、その後は2年近く停滞していた。 レベル感 職業プログラマーから見た水色までの問題のレベル感。あくまで個人の感想。 灰色 チュートリアル。とりあえず文法を覚えよう。 茶色 初学者なら及第点。仕事でプログラムを書く人には普通に解けてほしい。文字列操作やコレクションの使い分けなど普通にプログラムをバグらせず実装するのに必要になってくる。ただ競技プログラミングでは典型であっても、業務ではあまり使わないものもあるので、初見で解けない問題があってもおかしくはない。 緑色 必要な知識が競技プログラム特有になり、プログラマでもぶっつけでは解けない問題が多いと思われる。Union-FindやSegmentation-Free、ダブリング、座標圧縮、動的計画法など、既存のアルゴリズムを色々と知る必要がある。ただそれらを理解さえすれば解けるので、地道に一通り覚えれば到達できるだろう。 水色 既存のアルゴリズムを組み合わせたり応用が必要になる。もしくは数学要素(漸化式や数列、組み合わせなど高校数学~)の少し複雑な問題が出題される。考察が必要になるため、難易度が高くなる印象。 私は緑にはすぐなれたが水色は時間がかかった。これより上の色は解ける気がしない。 ABCの難易度向上について 近年でABCのレベルが上がっている論がある。下位領域の絶対評価であれば、確かに難しくなっていると言える。特に典型問題のパフォーマンスがガタ落ちしている。これは過去問や解説の充実などにより、典型問題が習得しやすくなったためと思われる。 一方で類題が少なかったり典型から外れた問題は正答率が落ちる。相対評価で言えば参加者のレベルが上がったというよりは、環境が整ったと言う方が正確だろう。 なお仕様変更でUnrated戦略(問題が解けた場合だけ参加する)が使えなくなったため、変に低いレートが出ることは減った。 学習法など シンプルに過去問題を解きながら分からなければ解説を読むのが基本。場合によっては別途アルゴリズムの解説を探す。典型のアルゴリズムなどは、その中身を理解しているかどうかで

WPF DataGridで列選択できるようにする

イメージ
WPFのDataGridはSelectionUnitプロパティをCellOrRowHeaderにすると行ヘッダのクリックで行選択ができる。一方で列選択は用意されていない。必要になったので自前で再現してみたが、案外面倒くさかったので残しておく。 XAML <DataGrid x:Name="MyGrid" SelectionMode="Extended" SelectionUnit="CellOrRowHeader" CanUserSortColumns="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False"> <DataGrid.ColumnHeaderStyle> <Style TargetType="DataGridColumnHeader"> <EventSetter Event="PreviewMouseDown" Handler="Column_MouseDown" /> <EventSetter Event="PreviewMouseMove" Handler="Column_MouseMove" /> <EventSetter Event="PreviewMouseUp" Handler="Column_MouseUp" /> </Style> </DataGrid.ColumnHeaderStyle> </DataGrid> セルの複数選択が必要なので、SelectionModeをExtended、SelectionUnitをCellまたはCellOrRowHeaderにする。