#夏休み12日目
夏休み12日目
- 無
進捗
- ?
- yukicoderの作業進んだ
明日
- 有を目指す
- 凍結してたunityいじり再開したさがある
夏休み11日目
夏休み11日目
起きた時点で12時なので半日しか過ごしてない
進捗
- 雑タスクを終わらせる
- 費用納入とか
- 成績確認
- お察し アルゴだけ良かった
- 学科の実験課題選択希望を出す
- 忘れてた
APのお勉強
- 50ページくらい
- コンピュロアーキテクチャでやった内容がまだ多い
- 半分くらい忘れてそう(え?)
div2バチャ(736)
- こどふぉ半年ぶりくらいにやった
- A : こどふぉにありがちなやつ 気づくのに6分は、まずい
- B : 左から見てって左に行って損はしなさそう 証明 : AC
- C : 自分より大きいのが隣にいたら残れなさそう 証明 : AC
- D : セグ木二分探索だね→TLE logは定数ではない...
- E : コンテスト後にヒント見て解いた dpの定義上手ですね
明日
- 午前中に起きてくれ
- こどふぉしたい かも?
夏休み10日目
夏休み10日目
日曜日は休日!(デジャヴ)
進捗
- 勉強
- 2A/3Sの数学の復習をし始める
- 全て忘れてる
- AP
- 100ページくらい進んだ
- アルゴとかなのでまあ
- 競プロ
- yukicoder
- testerさんが1問以外見つかる
- いつ出題できるのか...
- yukicoder
- 寝落ち
- 夕飯買おうと思ったあたりで記憶が飛ぶ
- 今起きました(8/16 1:40)
- 腹へった どうしてくれんの
明日
- 寝落ちしないで
- 平日なのでそろそろ進捗を...
夏休み9日目
夏休み9日目
土曜日は休日!(素振り)土曜日は休日!(素振り)
進捗
競プロ
- RGB Balls(2202)
- 最小値はなんとなく分かったけどそこからグダる
- dpでも二項係数でもない数え上げが出来なさすぎる
- ABC214
- ABCDFの5完
- F は部分列dpほぼ貼っただけだし実質何もしていない
- yukicoder
- testerを募集し始めた
- 最速で出題 9/17 ってまじ?夏休み終わってしまう
- RGB Balls(2202)
その他
- 何もしていません え?
- 休日は休む日
明日
- 書くことがあると良いですね
夏休み8日目
夏休み8日目
日記が2日続いた快挙 継続の天才
進捗
- 家の大掃除
- 勉強しようと思ったら机汚すぎてやる気が起きなかったため掃除
- 今?
- 寝落ち
- 負の進捗
- 掃除終わって布団が気持ちよかったんです(言い訳)
競プロ
寝落ちのせいで進捗が薄い
明日
掃除したんだから勉強してください
yukicoderの作問作業 結局今日やらなかったのでやる
夏休み7日目
夏休み7日目
- 7日目だということを知って驚愕する 人生の浪費が上手
進捗
買い物
- 参考書などを買う
- 積読を増やすな
競プロ
- 未AC埋めバチャをし始める
- Tree Burning
- X が番号順に単調増加(当たり前)なこと忘れてlogをつけそうになる
- 考察は無 添字で嫌な気持ちになる
- Graph Smoothing
- 制約が行列累乗ですと言っているのでやると通る
- Three Coins
- 解けません(え?)
- 嘘DPを書いて終了
明日
APとか悲惨だった学業の復習とか早く始めてください はい...
yukicoderの作問作業が終わりそう
https://kenkoooo.com/atcoder/#/contest/show/15c65a5b-c93d-4214-9d82-b598dc8153a1 をやる 何日続くでしょう
ARC110-E Shorten ABC 解法メモ
公式解説と若干違う解法だったのでメモしておきます
解法
まず公式解説と同様に A,B,C をそれぞれ 1,2,3 に対応させます。このとき、1 xor 2 = 3、1 xor 3 = 2、2 xor 3 = 1 なので、操作は隣接要素をその xor に置き換える操作と言い換えられます。(ここまでは公式解説と同じです)
次に、累積 xor を取ります。 とします。こうすると、操作は以下のように言い換えることができます。
- かつ であるような を選び、 を列から消去する。
この結果できる列を数え上げれば良いです。これは、消去しない要素を選ぶ、即ち部分列の数え上げと捉えることができるため、部分列 dp の要領で、以下のような動的計画法で数えられます。
- 番目の要素まで考えて、最後に を消去せずに残すような部分列の取り方の総数。
ただし、部分列dpと同様に、最終的な列を決めたとき、残す文字は可能な限り先頭のものを選ぶことにします。 からの遷移を考えます。次に取る値を とし、 であって であるもののうち、最小の値を とおきます(そのような がない場合は遷移しません)。
- のとき : まず、 なので、 の隣接項は互いに異なります。すると、 が分かります。このとき、どのような消去手順を取っても最終的に と に挟まれた値を消去できないことは明らかなので、遷移不能です。
- のとき : 必ず遷移できます。これは、 を満たす全ての に対して、 であるので、必ず の手前の値を消去できるためです。
以上より、この dp は で全て計算できます。
最終的な答えを求めます。明らかに、末尾の値は消去不能なので、残る部分列の末尾の値は であることがわかります。 先ほどの部分列 dp のルールから、末尾が である部分列の総数とは、 であるような全ての に対する の総和として求まります( のとき、 が末尾のパターンを数えないように注意)。
というのは半分嘘で、仮に消去不能なために必ず が 個以上は残る、というような場合には 番目以降の値しか足しあげてはいけません。 しかし、実際にはこの制約が生じるのは が全て同じ文字からなる場合のみです。これは、
- もし に 以外の値が2種類以上含まれていた場合、全ての文字が消去できる。
- が2種類しか値を含まない場合、隣接項が異なることから、 は 01010101010...のようになっていて、これは の文字が全て同じ時に他ならない。
というように示すことができます。よって、予め が全て同じ文字の場合は 1 を出力し、それ以外は上記の計算によって正しい答えが求められます。
提出(C++)
備考
結局最後の答え足しあげパートで公式解説っぽいことをしているので遠回りな気もしてきました(?)