Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
AtCoder AGC 001 B - Mysterious Light 考察と実装
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
task4233
February 07, 2019
Programming
590
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AtCoder AGC 001 B - Mysterious Light 考察と実装
AGC001-B Mysterious LightのEditorialの理解の足しになるように, という思いで作成しました.
task4233
February 07, 2019
More Decks by task4233
See All by task4233
pprof vs runtime/trace (FlightRecorder)
task4233
0
440
embedパッケージを深掘りする / Deep Dive into embed Package in Go
task4233
2
850
GC24 Recap: Interface Internals
task4233
1
840
GopherCon 2024 Recap: Exploring the Go Compiler: Adding a "four" loop / 構文追加で学ぶGoコンパイラの処理
task4233
0
830
Goのデバッグ用ロガーの開発を通して得た デバッグとgoパッケージに関する知見/Knowledge by given implementation of logger for debug
task4233
0
680
入門XSS / Introduction of XSS
task4233
3
3.1k
脆弱性スキャナのOWASP ZAPを コードベースで扱ってみる / OWASP ZAP on a code base
task4233
2
3.8k
誘導を読み取って1ステップ上の問題を解けるようになろう/Tips for Solving CTF with Reading Leads
task4233
1
1k
JavaScriptはなぜシングルスレッドでも非同期処理ができるのか/Why Can JavaSctipt Invoke Asynchronous in Single Thread?
task4233
24
22k
Other Decks in Programming
See All in Programming
機械に任せるテスト、人が見るテスト ⽣成AIで引き直した、運⽤保守フェーズの線引き
dske104
0
190
Starting & Sustaining Code-Based E2E Testing for Non-Coding QA Teams( #jasstniigata )
teyamagu
PRO
1
1k
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1.2k
Long Living Tokens, Die, Die, Die! (or: The One Ring is Banned in Modern)
sylph01
0
280
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1.1k
現場と育てるRailsモデリング 〜Spreadsheetから始めたモデル設計〜
siroemk
2
560
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
27
31k
パスワード再設定メールのURLについて知っておこう
uyuki234
0
160
ソニーのクラウド共通基盤の変遷とAI時代の開発スタイルに合わせた進化 / The Journey of Sony’s Common Cloud Platform and Its Evolution for AI-Native Development
kenjiyoneyama
0
260
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
290
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.2k
contenteditable と日本語入力に向き合う
colorful12
0
200
Featured
See All Featured
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.2k
Deep Space Network (abreviated)
tonyrice
0
370
Done Done
chrislema
187
17k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
2
360
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
630
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
640
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
570
Crafting Experiences
bethany
1
380
GitHub's CSS Performance
jonrohan
1033
470k
Heart Work Chapter 1 - Part 1
lfama
PRO
10
37k
Transcript
AGC001-B 考察と実装 @task4233
もくじ 1. 概要 2. 考察 3. 実装 4. まとめ 2
1. 概要 ・1辺の長さがNの正三角形abcがある. ・不思議な光は, 自分の軌跡と辺に当たったときに反射する. ・頂点aからXだけ離れた点から辺bcと平行な光を放った時, もう一度その点に戻ってくるまでの軌跡の和を求めよ. 3
2. 考察 問題がよくわからないので, 問題に与えられた図を用いて一般化してみる. 4
N, Xについて一般化(図はN=5, X=2の時のもの) X N X 5
N, Xについて一般化(図はN=5, X=2の時のもの) X N N-X X 6
N, Xについて一般化(図はN=5, X=2の時のもの) X N N-X X X 7
N, Xについて一般化(図はN=5, X=2の時のもの) X X N-X X 8
N, Xについて一般化(図はN=5, X=2の時のもの) (N-X)-X N-X X 9
N, Xについて一般化(図はN=5, X=2の時のもの) (N-X)-X N-X X (N-X)-X 10
N, Xについて一般化(図はN=5, X=2の時のもの) (N-X)-X (N-X)-X (N-X)-X 11
N, Xについて一般化 先ほどまでの図で反射した光に周期性があったことが分かるは ず. その周期性とは以下の3つ. 1. 2回反射した後の領域に, 平行四辺形が出現すること 2. N,
N-Xの後の反射において, 2回ずつ同じ距離を進むこと 3. 出来た平行四辺形の辺が等しい時に, 反射が終わること それぞれ見ていく. 12
2-1. 平行四辺形の出現 右下の図は6枚目のスライドの図である. ここで, 光が2回進むと平行四辺形ができることが分かる. なお, その辺の長さは 前の2つの光の軌跡の距離と一致する. (右の図で言えば, XとN-Xになる)
X N N-X X 13
2-2. 同じ距離の軌跡 右下の図は8枚目のスライドの図である ここで, X->N-Xの軌跡の後に, X->Xのように同じ距離だけ進んでいることが分かるはず. なお, その距離は2-1.で説明した 平行四辺形の辺の最小値である. X
X N-X X 14
2.3. 反射の終了 右下の図は11枚目のスライドの図である ここで, 反射が終了する時, 平行四辺形の2辺が等しく なっていることが分かるはず. ((N-X)-X = (N-X)-Xで等しい)
(N-X)-X (N-X)-X (N-X)-X 15
3. 実装 2.での考察により, 以下のような再帰が書ける. 出来る平行四辺形の2辺をx, y(x < y)とすると, と書ける. 16
3. 実装(C++) 実装すると右のようになる. ※int64_tはlong longでも問題ない しかし, これは制約が なのでTLEになる. そこで, 再帰を簡潔にする.
17
3. 実装 - 高速化(1) 再帰関数をじーっと見ていると, return f(mn, mx-mn) + 2
* mn の部分が無駄に見えてくる. (なぜなら, mx-mnというパラメータの関数を呼び出す度に2*mnを 加算するので, その加算をまとめて[mx/mn]* 2 *mnとすればまと められるから) ※[ ]はガウス記号. 18
3. 実装 - 高速化(2) すると, 先ほどの再帰は以下のように書き直せるはず. なお, y%x=0の式で最後にxを引いているのは, 再帰の終了時に光が平行四辺形の半分だけ進むため. 19
3. 実装 - 高速化(C++) 改めて実装すると 右のようになる. これで通る. 20
4. まとめ ・今回のように, なんとなく再帰らしいことは分かるが, その実装が上手く行かない時は, 実際に図に書き出すと 意外とうまく行くこともある. ・今回の高速化で用いたような, 減算を除算(加算を乗算)でするテクは便利なので, 使えるようになっておくと良いと思う.
21
以上. お疲れ様でした.