競技プログラミング総合スレ 63

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (ワッチョイ 1f9f-qCnf)
垢版 |
2021/07/28(水) 21:58:48.02ID:nljYiy+l0
!extend:checked:vvvvv:1000:512
↑2行になるようにする

競技プログラミング、オンラインジャッジ、プログラミングコンテストやCTFに関する雑談スレ
次スレは>>950

AtCoder https://atcoder.jp/
yukicoder https://yukicoder.me/
Codeforces https://codeforces.com/
CodeChef https://codechef.com/
Project Euler https://projecteuler.net/
CLIST https://clist.by/
AtCoder Problems https://kenkoooo.com/atcoder/
AtCoder Clans https://kato-hiro.github.io/AtCoderClans/

※前スレ
競技プログラミングにハマるプログラマのスレ 62
https://medaka.5ch.net/test/read.cgi/prog/1626625368/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2022/09/09(金) 20:05:14.26ID:zBJv5lXS0
ある一定レベル以上行くと要求知識と難易度ってそんな関係ないんだよね
小学生でも理解できる単純な貪欲アルゴリズムが解法の問題が永続赤黒木を要求する問題より難しいということがままある
2022/09/09(金) 20:06:03.79ID:pJ7ShlGc0
解けないよ
小学校の計算ドリルじゃあるまいし

AGC解いてみればわかると思うけど、知識は大前提で、それ以上に閃きみたいなのが必要
つまりアルゴリズム知識問題というよりは、どちらというとやたら頭を使うパズルやなぞなぞといったほうがいい
2022/09/09(金) 20:11:55.82ID:zBJv5lXS0
AtCoderに関して言えば、正直、ABCの問題(Exまで)や典型90を解いて蟻本を読むだけでもほぼ知識的には網羅できていて、学術的なアルゴリズムとデータ構造の本を読む必要性があるかというとそこまででもない
ただ、アルゴリズムとデータ構造を題材としたゲームをやっているので周辺知識に興味がある人も多くいて、趣味で勉強している人は結構いる雰囲気
学術的じゃない人もいるけど、学術的なことが好きな人も他より多めだと思うので、そういう人と話してみたら面白いのではないかな
2022/09/09(金) 20:34:07.29ID:yIa0OFzGM
アルゴリズムとデータ構造の網羅性のある教科書の知識があれば知識面では十分問題が解ける水準にあると思う
ただそれには前提があって、発想力がないといくら知識があっても解けない(そしてここの要求水準が結構厳しめ)
って感じかね
2022/09/09(金) 20:37:14.53ID:pJ7ShlGc0
そうだよ
AGC解いてみろよ
AGCでも、AとかB問題ならアルゴリズム知識すら不要で、発想力のみ問われてるようなのが多いぞ
711デフォルトの名無しさん (ワッチョイ e733-Iguz)
垢版 |
2022/09/09(金) 20:48:11.75ID:0OeV3J7Z0
何十年考える時間与えられても解けない自信あるわ
2022/09/09(金) 20:50:30.48ID:yIa0OFzGM
>>705
AtCoderの社長のchokudaiとかは、アルゴリズムイントロダクションを昔読んでたね
競プロで強くなるために最適な道かは知らないけど、読んでる人はいっぱいいると思う
2022/09/09(金) 20:53:37.03ID:Xak+SWAc0
好きな、覚えたてなコンピューター言語その他を使ってやるブラゲーっと思ってやってみた。
https://www.youtube.com/watch?v=Z9ki00Z5SWg&list=PLirT2ByBZWrNT1tlKZy2uAFRsaEc9KEEe&index=13

任天堂の“絶対に挫折させないプログラミングゲームUnreal Emgineみたいなノードだけど、Unreal Engineでいいんじゃないかと思った。
https://www.youtube.com/watch?v=Z9ki00Z5SWg&list=PLirT2ByBZWrNT1tlKZy2uAFRsaEc9KEEe&index=13
2022/09/09(金) 21:42:10.67ID:eDV4BhqD0
>>705
試しに解かなくてもいいけど、このへんの問題を考えてみ
AGCの中では破格に簡単な部類の問題だよ
https://atcoder.jp/contests/agc056/tasks/agc056_a
https://atcoder.jp/contests/agc021/tasks/agc021_a
https://atcoder.jp/contests/agc053/tasks/agc053_a

アルゴリズムの知識なんて全くいらないし、アルゴリズムの参考書なんてほとんど役に立たないよ
2022/09/09(金) 21:45:01.95ID:eDV4BhqD0
10^8回以上のループを書いてしまったら、実行時間制限に引っかかりそう

っていう程度の知識はいるけども
716デフォルトの名無しさん (ワッチョイ bf71-InTp)
垢版 |
2022/09/09(金) 21:51:15.46ID:jmAmnAZ30
というか、典型を嫌うのでアルゴリズム全然使わなくても水とか青になれちゃうじゃん
2022/09/09(金) 22:03:48.01ID:N29LuzVwa
アルゴリズムの定義読んでこい
2022/09/10(土) 00:12:27.66ID:VggS9H2X0
蟻本は著者の頭が良いから簡潔に書かれてて、それ故に俺の頭じゃ理解できん
2022/09/10(土) 03:32:09.56ID:yhVOakDL0
本当に賢い人は云々
720デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/10(土) 04:59:42.21ID:eGCheWpr0
>>718
単に説明が下手なだけだと思います。
完成度も低いと思います。
2022/09/10(土) 05:04:17.39ID:44udkTjy0
ほならね
722デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/10(土) 05:06:40.45ID:eGCheWpr0
海外の本で良い本はないんですか?
2022/09/10(土) 13:06:15.05ID:ES5OPAh40
蟻本の説明がへたくそだとは思わないし、行間も一般的な数学書より狭いと思うけど、実際海外の競プロ本ってどんなのがあるのか気になるな
2022/09/10(土) 14:11:29.88ID:yhVOakDL0
Springerの"Guide to Competitive Programming"は読んだことある。
けんちょん本と同等程度のレベルって感じだけど典型テクニックへの言及はこっちのほうが多いかな
アルゴリズムの説明だけで実装が書いてないところが結構ある
2022/09/10(土) 14:14:41.39ID:2MbFO6mH0
蟻本は簡単な説明だけ。
個別のアルゴリズムは検索して、理解するまで自分で図を描いて勉強しないと無理

だから、>>642
に書いたように、個別の著書で調べる

湊真一、セジウィック、石畑清、川中真耶、インド人とか

例えば赤黒木なら、どの本だったかな? みたいな
2022/09/10(土) 15:22:48.30ID:ES5OPAh40
>>724
ありがとう
聞いた感じ、英語圏の標準的な入門書って雰囲気だね
やっぱり気になるのは中国だからいくつか調べてみた

・算法竞赛入门到进阶
・算法竞赛入门经典
・算法竞赛宝典

調べた感じまず目についたのはこのあたり?算法竞赛で競技プログラミングらしい
いずれもペーパーブックしかないところが惜しい
俺は機械翻訳しないと中国語読めないので
入门は日本で出版されている平均的なものとあまり変わらなそうな予感がするけど、宝典とかいうのは気になるね
2022/09/10(土) 15:25:44.75ID:ES5OPAh40
と思ったら電子書籍もありそうだ
amazonだけで調べて電子書籍ないと思い込んだのは我ながらネットリテラシー低いな
2022/09/10(土) 15:28:15.89ID:ES5OPAh40
しかし中華サイトは技術サイトでもキモい広告の表示のされ方がするな
2022/09/10(土) 16:26:58.64ID:vGRthkD8p
いいね、中国の最高の本を見つけたら教えてね
2022/09/10(土) 16:53:59.26ID:/N4+WCeu0
無理に中国語にこだわらなくてもいいと思うけど
2022/09/10(土) 17:39:53.64ID:yhVOakDL0
蟻本の凡人日本語訳が求められている
2022/09/10(土) 20:23:17.78ID:denZ2QcH0
今日初参加するわよろしく
本番の回答ここに貼ってくれてもOK!
2022/09/10(土) 22:42:02.88ID:h7iCGaIK0
なんで久しぶりに参加したときだけDが異常にムズいの
EとかFとか挑戦すらできず…
2022/09/10(土) 22:59:34.87ID:FQ2evD1NM
D解いた時点でひどい順位だったけどFGが軽実装で救われた
2022/09/10(土) 23:02:53.92ID:ulAsr0Va0
安倍晋三erすき
2022/09/10(土) 23:03:14.22ID:ulAsr0Va0
スレ間違えたけど間違えてない気もする
2022/09/10(土) 23:37:10.70ID:ES5OPAh40
Exの最後のパートの「区間集合が与えられて、その集合に属する任意の区間内に*が存在するように*を配置するとき、*の数を最小化せよ」って問題、定期的に出る典型だ
これもmincut maxflowの要領で双対とると蟻本でも有名な区間スケジューリング問題になって双対すごいってなった問題
なお今日はそこまで至れなかった模様
738デフォルトの名無しさん (ワッチョイ de71-pqEy)
垢版 |
2022/09/10(土) 23:43:38.03ID:IxTwXPHP0
Dみたいなプログラミング的に普通っぽい問題の難易度が高いw
2022/09/10(土) 23:48:32.95ID:v7e0/wUkM
>>738
dfsで全列挙みたいなのが地味に一番実装難易度高い気がする
2022/09/10(土) 23:50:24.73ID:v7e0/wUkM
G、実はabc...とzyx...のときの順位を足して二で割るだけでいいって流れてきて、嘘だろ!?って思ったけど式を見てみたらそうだった
実はTrieもsuffixもprefixも要らんかったんや…
2022/09/10(土) 23:56:40.36ID:ES5OPAh40
>>730
競プロ強いのは中国語圏とロシア語圏だし、日本で出版されているよりすごい書籍があるとしたらその辺かなと思って
2022/09/11(日) 00:01:21.87ID:jAgyYoIY0
あと、Exの解説ではSA使ってるけど、長い文に対する複数文字列の位置検出といえばAho Corasick法がまさに使える
2022/09/11(日) 00:14:58.33ID:jAgyYoIY0
C、絶対位置を相対位置に変換して考えるのって初見でできたらかなり頭いいと思うんだけど茶diffなんだね
みんな頭いいな(もしくは典型で染みついている層が茶まで下りてきてるか)
2022/09/11(日) 00:32:41.95ID:Bha8il/10
パソコンに向かって解法や実装で延々と悩んでたのに、
疲れてベッドに横たわるとすぐにアイデアが出てくるのが謎
2022/09/11(日) 00:49:02.92ID:jAgyYoIY0
上位者は本番中に問題を解ける思考モードへの入り方がうまいっぽい
chokudaiか誰だったか忘れたけど、本番じゃないとAGCの問題解くの難しいって言ってたな
かなりメンタルが影響するらしい
2022/09/11(日) 00:51:45.15ID:kEOVMHNm0
数オリで中国チームが全員満点って話あって、情オリ見てみたけどこっちでも上位4は中国チームのメンバーで独占してるんだなあ・・・
https://stats.ioinformatics.org/results/2022

と思ってもっとよく見てみたら6位まで全部中国人やんけ
747デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/11(日) 11:51:48.46ID:c+Ui/I6I0
>>737
Exというのはどの問題のことでしょうか?
2022/09/11(日) 12:15:21.09ID:sY9L7CLNM
>>747
ABCの八問目で一番最後の問題
昔はHだった
749デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/11(日) 12:33:26.32ID:c+Ui/I6I0
>>748
ありがとうございました。

『プログラミングコンテストチャレンジブック第2版』のp.325に、

「したがって、先ほどの長方形を左半分と右半分の一辺dの正方形に分けると、それぞれの正方形には、
点はたかだか3個しか含まれません。」

と書いてあるのですが、たかだか2個ではないですか?
3個になる例はありますか?
750デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/11(日) 12:37:14.74ID:c+Ui/I6I0
3点となる例がわかりました。
でも4点の例がないことはどうやって証明するのでしょうか?
直感的には3点であろうと思いますが。
2022/09/11(日) 12:39:35.27ID:B0Yjkt4W0
>>743
競プロ初心者だけどC、40分くらい考えた末解けて自分天才だろと思ったのに茶diffだったんだな
みんな頭いいな
2022/09/11(日) 12:40:58.84ID:kEOVMHNm0
初心者で今回のCが解けるなら大したもんだよ
2022/09/11(日) 14:17:40.92ID:sY9L7CLNM
>>750
コンテスト中だと直感で済ませちゃうけど、ちゃんと証明書こうとするとめんどいやつだ

全ての点対の距離がd以上であるような4点が正方形領域内にあると仮定する。
この四点をA,B,C,Dとし、四角形ABCDを考える。
(1)全ての頂点の角度が180°未満のとき
角度が90°以上である頂点が存在、これをAとしても一般性を失わない。
ここで余弦定理より、BD^2 = AB^2 + AD^2 - 2 AB AD cos∠BAD >= AB^2 + AD^2 >= 2 d^2
よって、BD >= √2d
(2)ある頂点の角度が180°以上のとき
角度が180°以上である頂点をAとしても一般性を失わない。
ここで、∠BAC+∠DAC>=180°なので∠BACと∠DACのいずれかは90°以上。
∠BACを90°以上としても一般性を失わない。
(1)と同様の議論により、BC >= √2d

正方形領域内の点対距離は√2d未満(座標計算普通にやれば示せると思う)
(1),(2)のいずれの場合においても矛盾が生じる。
(証明終)
2022/09/11(日) 14:26:08.97ID:sY9L7CLNM
あ、(1)も(2)も不等式評価で角度が180°以下であることを使ってるけど、ちゃんと書いてないからキモい雰囲気の証明になってるな
2022/09/11(日) 15:12:26.47ID:jAgyYoIY0
凸包の最遠点対という特徴量、いかにも重要そうだけどあまり競プロで使った覚えがない
ABC234Exなんかは最近点対問題の解法と似た発想かもしれない、さすがにABC234Exの方が難しいけど
2022/09/11(日) 15:27:05.90ID:kEOVMHNm0
本質は無なので無料です
2022/09/11(日) 15:46:11.70ID:sY9L7CLNM
逆に最遠点対どうやってNlogNで求めるんだっけって思ったが、凸包求めてキャリパー法でくるくるか
幾何系はド典型でも全然頭に定着しない
758デフォルトの名無しさん (ワッチョイ 7d01-J1Nd)
垢版 |
2022/09/11(日) 16:55:39.75ID:Nz+JHxy30
昨日のABC、Dの実装でバグらせる予感しかしなかったからEから解いて何とかギリギリ解けたけど難易度E>Fだったんだな
F典型って聞いたけど青くらいまで行けば典型に見えるんだろうかたしかに取り組みやすそうな問題ではあったけど
759デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/11(日) 17:29:18.43ID:c+Ui/I6I0
>>753
証明ありがとうございました.
うまい証明ですね.
760デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/11(日) 17:37:25.16ID:c+Ui/I6I0
>>751
今,解こうとしていますが,難しいですね.
素朴な方法だとΘ(N^2)ですね.
回転前の喜ぶ人の人数から,回転後の喜ぶ人の人数が簡単に計算できないかと考えているのですが,うまくいきません.
761デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/11(日) 18:18:32.35ID:c+Ui/I6I0
>>751
幅3のパルス波が押し寄せてくるイメージを思いつきました.
なんとなく解けるような気がします.
762デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/11(日) 18:57:12.47ID:c+Ui/I6I0
>>751

半日かかりましたが,Θ(N)のアルゴリズムを作ってパスしました.
これじゃ,コンテストでいい成績は残せませんね.
2022/09/11(日) 20:29:08.05ID:792CMm+80
ARC出ません
2022/09/11(日) 23:13:18.91ID:jAgyYoIY0
E問題解きたかったなあ…
2022/09/11(日) 23:24:22.70ID:jAgyYoIY0
最終的にはわからない問題を考え続けるのが一番の練習法らしいから、解説を見ないで解く体力が長い目で見て実力に寄与する気がするし、ABC-Cを半日考えて解くのは上等
ただ、ABCだと知識ゲーの要素があるから、最初のうちは解説見た方がサクサクレートが上がる場合もあるし、悩みどころだ
766デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/12(月) 07:10:41.31ID:rinzAyh80
「Closest pair of points」を求めるアルゴリズムについてですが,『プログラミングコンテストチャレンジブック第2版』の
説明だと説明が全く不足しています.

この本を褒める人がいますが,信じられません.
確かに他に少し高度なこの類の本がないというのは事実だと思いますが.

CLRSの計算幾何学の章に非常に詳しく解説が書いてありますので,そちらを読もうと思います.
767デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/12(月) 07:12:15.09ID:rinzAyh80
『プログラミングコンテストチャレンジブック第2版』ですが,完全な解説ではなく,スケッチ程度の説明集だと
思います.

ネット上の解説などもそのようなものがほとんどだと思います.
2022/09/12(月) 07:57:57.20ID:AFh4CYQbr
そうなんだ
2022/09/12(月) 11:21:41.15ID:WsTAO2GiM
4点の証明よりめんどい行間ある?って思ったけどマージソートの部分か
x座標で点集合を分けたあと、各ステップでx座標的に隣接する点集合を合わせることを繰り返すわけだが、そこでマージソートの要領でy座標をソートすることで、時間計算量を増やさずにy座標のソートができる
ある程度のレベルの学術書で単体で行間埋められる本の方が珍しいし、別に行間だらけだから良書じゃないなんてことはないと思うがな
770デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/12(月) 17:30:34.33ID:rinzAyh80
>>769
確かに有益な本だとは思うのですが,もう少し解説が丁寧だといいなと思います.
完全に理解するために,ソースコードに頼ることが非常に多いので.

何かおすすめのAtCoderの問題はありますか?
難しすぎると解けないので,初心者でも解けるくらいで面白い問題が希望です.
2022/09/12(月) 18:09:25.90ID:E//33fQvM
>>770
このサイトはAtCoder Problemsといって、各問題のdifficultyという数値を見ることができる
https://kenkoooo.com/atcoder#/table/

difficultyとはなにかと言うと、半分ぐらいの確率でその問題を解けるであろう人のレートを推定したもの
ここでdifficultyの二分探索でもすれば自ずと丁度いいぐらいのところに行きつくと思う
基本的には自分のレートと同じか一色上ぐらいがやってて楽しい
初心者でプログラミング自体はできるんなら、最初はABC-C、ARC-Aぐらいの問題が丁度いいレベルと思う
面白さについて言えばAtCoderの問題は大体パズル的には面白いはず、ただそこも好みだな
高度な知識をたくさん使いたいんならCodeForcesの方が面白いかもしれない
772デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/12(月) 18:15:28.92ID:rinzAyh80
>>771

詳しく丁寧にありがとうございました.

時間をかけて解いていきたいと思います.
2022/09/12(月) 18:20:46.33ID:E//33fQvM
蟻本が解説に関して親切設計な本ではないのは確か
今は蟻本よりもっと初学者向けの競プロ本がたくさんあるから、その中から選ぶのも手ではある
最近は鉄則本なんていうのも出て、それも蟻本に比べたら多分初学者向け
https://kato-hiro.github.io/AtCoderClans/books/

ただ厳密数学的な意味で丁寧な本ってあるんか?自分は蟻本以外読んだことないからよくわからん
774デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/12(月) 18:38:46.03ID:rinzAyh80
>>773
リンクありがとうございました.
2022/09/13(火) 06:55:02.21ID:sWJYur860
こどふぉで自分のレートのdifficultyの問題をずーっとやってるんだけど、
簡単に解けるのと全然歯が立たないのがある…
2022/09/13(火) 19:26:09.73ID:9QsJBQr90
外国人と日本人で結構な得意な問題が違う気がする
777デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/14(水) 09:18:47.48ID:jsfAG/sd0
github.com/drken1215/book_algorithm_solution/blob/master/solutions/chap04.md

この4.6のコードですが、本当にO(N*W)ですか?

ボトムアップ型の動的計画法がO(N*W)というのは分かりますが、4.6は違うような気がします。
778デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/14(水) 09:24:01.59ID:jsfAG/sd0
>>777
これは、部分和問題のコードのメモ化再帰のコードです。
2022/09/14(水) 11:19:03.17ID:9MjfrPGa0
ざっと見た感じはO(NW)で合ってそう
2022/09/14(水) 11:35:22.59ID:vMgqqEzp0
引数のwが負になりうる実装で、そもそも壊れてそう
2022/09/14(水) 11:39:04.72ID:vMgqqEzp0
issue 立ってるけど放置されてるな、やる気はその程度か
782デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/14(水) 13:32:56.43ID:jsfAG/sd0
文字列の編集距離について質問です。
S、Tを文字列とする。
dp[i][j]をSの最初のi文字からなる文字列とTの最初のj文字からなる文字列の間の編集距離とする。

■変更操作(Sのi文字目とTのj文字目とを対応させる):
S[i-1]==T[j-1]のとき:コストを増やさずに済みますので
chmin(dp[i][j], dp[i-1][j-1])
です。
S[i-1]!=T[j-1]のとき:変更操作が必要ですので
chmin(dp[i][j], dp[i-1][j-1]+1)
です。
■削除操作(Sのi文字目を削除):
Sのi文字目を削除する操作を行いますので
chmin(dp[i][j], dp[i-1][j]+1);
です。
挿入操作(Tのj文字目を削除):
Tのj文字目を削除する操作を行いますので
chmin(dp[i][j], dp[i][j-1]+1)
です。
783デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/14(水) 13:34:32.86ID:jsfAG/sd0
「S[i-1]==T[j-1]のとき」と書いてありますが、これは
「S[i]==T[j]のとき」が正しいというわけではないですか?
784デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/14(水) 13:34:44.34ID:jsfAG/sd0
>>779-781

ご回答ありがとうございます。
785デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/14(水) 13:36:39.23ID:jsfAG/sd0
>>782
は『問題解決力を鍛える!アルゴリズムとデータ構造』という本に書いてある解説です。
786デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/14(水) 13:38:36.60ID:jsfAG/sd0
配列は0始まりなのでこれで間違っていませんね。
787デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/14(水) 13:44:17.21ID:jsfAG/sd0
>>782

S[i-1]==T[j-1]のとき:コストを増やさずに済みますので
chmin(dp[i][j], dp[i-1][j-1])
です。

これをSの最初のi文字からなる文字列を編集により、Tの最初のj文字からなる文字列に最小の手間で
変更するには、Sの最初のi-1文字からなる文字列を編集により、Tの最初のj-1文字からなる文字列に最小の手間で
変更すればいいということを言いたいのだと解釈しました。

Sのi番目の文字を変更したとしてもトータルの編集の手間が少なくなることはないというのは証明が必要ではないでしょうか?
788デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/14(水) 13:46:31.88ID:jsfAG/sd0
>>782

の他のところについても同様の疑問があります。
2022/09/14(水) 15:14:15.25ID:tHNQsFnsr
そうなんだ
790デフォルトの名無しさん (ワッチョイ de2a-62hs)
垢版 |
2022/09/14(水) 15:24:09.35ID:9+y+r6nn0
適当なこと言うけど
Sのi番目の文字を変更したとしても、最終的にはSのi番目の文字をTのi番目の文字に合わせないといけないから、
Sのi-1番目までの操作に置き換えられるということじゃないかな

例えば、bookをdeskに合わせるなら、
bookのkを適当にaに変える→booa
でも最終的には最後の文字はkにしないといけない
booaの最後にkを挿入→booak
booakっていうのは、bookのbooの部分にaを挿入したものと考えられる
こういう感じで、結局Sのi-1番目までの操作と考えることができるっていうことだと思う
2022/09/14(水) 15:30:11.95ID:5xlFzeB+0
S[i-1]==S[j-1]で、Sのi文字目かTのj文字目を変更したときに、dp[i][j]<dp[i-1][j-1]とするとdp[i-1][j-1]<dp[i-1][j-1]が導かれるようにできるよ
dp[i-1][j-1]未満の編集距離で揃えるにはSのi文字目かTのj文字目のどちらかを使わなきゃいけないことに注目する
792デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/15(木) 09:32:52.27ID:3elqjdXs0
>>790-791
ありがとうございました。
まだ、よく分からないので、少し質問の仕方を変えてもう一度質問させてください。

以下がなぜなのかが分かりません。
いかにも成り立ちそうですが、証明ができません。

S = 'LOGISTIC'
T = 'ALGORITHM'

(1)
Sの最後の文字CをTの最後の文字Mで置き換える。
Sからその最後の文字を除いた文字列を、Tからその最後の文字を除いた文字列に
最小の手間で編集する。

(2)
Sの最後の文字Cを削除する。
Sからその最後の文字を除いた文字列を、Tに最小の手間で編集する。

(3)
Sの最後の文字Cの後ろに、Tの最後の文字Mを付け加える。
SをTからその最後の文字を除いた文字列に最小の手間で編集する。

(1)、(2)、(3)を実行するのに必要な手間のうち最小の手間が、文字列Sを文字列Tに
編集する最小の手間である。
793デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/15(木) 09:35:19.04ID:3elqjdXs0
間違えました。以下のように訂正します。

S = 'LOGISTIC'
T = 'ALGORITHM'

(1)
Sの最後の文字CをTの最後の文字Mで置き換える。
Sからその最後の文字を除いた文字列を、Tからその最後の文字を除いた文字列に
最小の手間で編集する。

(2)
Sの最後の文字Cを削除する。
Sを、Tに最小の手間で編集する。

(3)
Sの最後の文字Cの後ろに、Tの最後の文字Mを付け加える。
SをTからその最後の文字を除いた文字列に最小の手間で編集する。

(1)、(2)、(3)を実行するのに必要な手間のうち最小の手間が、文字列Sを文字列Tに
編集する最小の手間である。
794デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/15(木) 09:38:28.08ID:3elqjdXs0
また、間違えました。以下のように訂正します。

S = 'LOGISTIC'
T = 'ALGORITHM'

(1)
Sの最後の文字CをTの最後の文字Mで置き換える。
Sからその最後の文字Mを除いた文字列を、Tからその最後の文字Mを除いた文字列に
最小の手間で編集する。

(2)
Sの最後の文字Cを削除する。
Sを、Tに最小の手間で編集する。

(3)
Sの最後の文字Cの後ろに、Tの最後の文字Mを付け加える。
Sからその最後の文字Mを除いた文字列を、Tからその最後の文字Mを除いた文字列に最小の手間で編集する。

(1)、(2)、(3)を実行するのに必要な手間のうち最小の手間が、文字列Sを文字列Tに
編集する最小の手間である。
795デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/15(木) 13:41:42.51ID:3elqjdXs0
SをTに最小の手間で変換するオペレーションが以下の画像の通りだとする。
オペレーションを実行する順序には関係なく、SはTに変換されることに注意する。

imgur.com/GSQfWoU.jpg

(1)Sの最後の文字の右にInsertオペレーションがある場合。

Sの最後の文字の後ろに、Tの最後の文字を付け加える。
Sからその最後の文字を除いた文字列を、Tからその最後の文字を除いた文字列に最小の手間で編集する。

これが(1)の場合に、SをTに変換する最小の編集方法になる。
796デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/15(木) 13:41:55.18ID:3elqjdXs0
(2)Sの最後の文字の右にInsertオペレーションがない場合。

(2-1)Sの最後の文字に行うオペレーションがN(何もしない)の場合。

この場合、Sの最後の文字とTの最後の文字は等しい。
Sからその最後の文字を除いた文字列を、Tからその最後の文字を除いた文字列に最小の手間で編集する。

これが(2-1)の場合に、SをTに変換する最小の編集方法になる。

(2-2)Sの最後の文字に行うオペレーションがD(Delete)の場合。

この場合、Sの最後の文字を削除する。
Sを、Tに最小の手間で編集する。

これが(2-2)の場合に、SをTに変換する最小の編集方法になる。

(2-3)Sの最後の文字に行うオペレーションがS(Substitute)の場合。

この場合、Sの最後の文字をTの最後の文字に置き換える。
Sからその最後の文字を除いた文字列を、Tからその最後の文字を除いた文字列に
最小の手間で編集する。

これが(2-3)の場合に、SをTに変換する最小の編集方法になる。
797デフォルトの名無しさん (ワッチョイ 6a55-V+uT)
垢版 |
2022/09/15(木) 13:43:21.05ID:3elqjdXs0
こう考えたのですが、これでいいでしょうか?
2022/09/15(木) 14:20:18.89ID:2rpOawCB0
多分、dp[i]を、i番目まで揃えたときの最小手順数だって定義してると思う
その次のインデックスの文字を揃えるために出来ることがその3パターンしかなければ、そうなんじゃないかなぁ
dpを更新したときに、定義が崩れてしまわないか?を集中して考えてみると良いと思う
2022/09/17(土) 14:19:59.56ID:ChhZpwg90
最近競技プロ出来てねー
まぁ2年くらいやったし飽きたのかも
800デフォルトの名無しさん (ワッチョイ 5701-nNgT)
垢版 |
2022/09/20(火) 09:38:15.86ID:l9naZzzk0
パイザってサイトに『エンジニア騎士とクエリの魔女』の『暗黒の地』って
競技プログラミング風味のものがあるんだよ。まあまあ面白くて
これで12位になったので、ソース公開するね。
https://paiza.io/projects/Me-9l8aRopclovpRhczITg
ソースを読んだ感想を書いてくれたりしてくれると嬉しいです。みんなもやってみよう
2022/09/20(火) 11:41:19.73ID:Qcy/onU00
いいね!
すごいね!
2022/09/20(火) 13:54:44.15ID:gUImHuHP0
この問題わかんね
https://twitter.com/SSRS_cp/status/1571996174604963840
https://twitter.com/5chan_nel (5ch newer account)
2022/09/20(火) 14:02:43.97ID:gUImHuHP0
平方分割すればできるのはわかるけど、想定解はそうじゃないっぽいし
2022/09/20(火) 14:51:16.41ID:Y9OiSWpN0
Lだけの話に限定するけど、
Lの効果をインデックス毎に保管しておいて、(入力例1なら[-1, -2, 2, 0, 1])
それのセグメント木を作れば区間最小値をlogNで取り出せるようになるからいけるんちゃうか?
2022/09/20(火) 16:42:42.75ID:fSXnXfcH0
耳DPをセグ木に乗せるだけやろ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況