224.1

ちょっと重いセットだったので途中まで...。

250

Nステップ目にはN個のNとN-1個のN-1と...1個の1を出力する、という数列がある時に、K番目に出力されている数を答えよ、という問題。


各ステップではN*(N+1)/2個出力されるので、今が何回目のステップかを求めて、その中でいくつ出ているかを計算して...、という感じ。書いてある通りにさっくり実装してください、ということ。

600

NxMの行列に大きさMのベクトルをかけて得られる大きさNのベクトルについて、i番目の要素が他よりも大きくなるように、NxM行列とMベクトルを修正する。各要素は1〜9の範囲内になくてはならず、大きさの変更も1しかできない。このとき、条件を満たす変換として最小の変換箇所数を答えよ、という問題。NとMは高々10とする。


かなり煩雑なので、まずMベクトルの修正箇所を計算する。1足す、1引く、何もしない、の3通りなので、3^10通り全部試せば良い。ここから先は、目標とする要素を0個いじる、1個いじる、...全部いじるときに、他の要素はいくついじらないかいけないかを計算すれば良い。いじる位置は、Mベクトルの絶対値が大きいものを優先に決まる。


で、これをJavaで実装してみたところ、かなり重たかったけれど、おおむね通るという感じだったので、定数倍の高速化。実際には入力の文字列を先に整数配列に直すだけで解決した。(大抵は面倒なのでやらなくても通るケースだけれど、毎回やった方がいいのかも知れない。)