Your SlideShare is downloading. ×
Indeednow finala
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

Indeednow finala

329
views

Published on

Indeedなう A日程 解説

Indeedなう A日程 解説

Published in: Education

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
329
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 2 A: Table Tennis writer: kawatea tester: taka_key
  • 2. ! 問題概要 3 1 65432 • n人の人を2人ずつのペアにする • ペアの強さ := 2人の強さの和 • 一番強いペアと一番弱いペアの強さの差の最小は?
  • 3. ! 直感的な考察 4 1 65432 • 強い人は弱い人と組んだ方が良さそう • 強いほうと弱いほうから一人ずつ順番にペアにしてはどうか
 → 正しい
  • 4. ! 証明 5 1         2    … … …… 強い 弱い 弱い 強い • 強い順に 1,2,…,n とし
 一番強いペアを i と n - i のペアとする
  • 5. ! 証明 6 1         2    … … …… 強い 弱い 弱い 強い • 一番強いペアの強さを小さくするためには、
 i までの人はn - i以降の人とペアになる必要がある
  • 6. ! 証明 7 1         2    … … …… 強い 弱い 弱い 強い • i までの人の誰かはn - i の人とペアになるため
 一番強いペアの強さを小さくすることはできない
  • 7. ! 証明 8 1         2    … … …… 強い 弱い 弱い 強い • 一番弱いペアについても、同様にして
 強さを大きくすることはできない
  • 8. ! 想定解法 9 1. n人の人を強さでソート - O(n logn) 2. 強い方と弱い方から1人ずつ順番にペアにする - O(n) 3. 各ペアの強さを調べる - O(n)
  • 9. 10 writer: numa tester: taka_key B: Office Ninja
  • 10. ! 問題概要 11 • 辺を越えてのみ移動できる • マスへ入ったときに、そこにある数の分だけコストがかかる • StartからGoalへの最小コストは? • マスの数は最大で 100 100
  • 11. ! 想定解法 12 ダイクストラ!
  • 12. ! 想定解法 13 • 正方形のマスを移動する場合と同じように考える
 典型的な方法 int dx[4] = { 1, 0,-1, 0}; int dy[4] = { 0,-1, 0, 1}; for(int i = 0; i < 4; ++i){ int nx = x + dx[i]; int ny = y + dy[i]; ……… } • 六角座標ではどうなる?
  • 13. ! 想定解法 14 1. 上手い具合に移動に使う配列を設定する
 行の座標が偶数の場合と奇数の場合に分ける • 次のことに気をつける • indexが0-basedかどうか • 行と列、どちらで場合を分けるか
  • 14. ! 想定解法 15 2. 頑張るとこんな感じにできる int dx[2][6] = {{-1, 0, 1, 1, 0,-1}, {-1, 0, 1, 1, 0,-1}}; int dy[2][6] = {{ 0, 1, 0,-1,-1,-1}, { 1, 1, 1 0,-1, 0}}; for(int i = 0; i < 6; ++i){ int nx = x + dx[x&1][i]; int ny = y + dy[x&1][i]; ……… } 3. 他は正方形の座標の場合と全く同じ
  • 15. 16 writer: Keith tester: numa B: Optimal Recommendations
  • 16. ! 問題概要 17 • 求職者の技術力、語学力、コミュ力が与えられる • 会社が採用にあたって最低限必要としている技術力、語学力、 コミュ力、その会社での年収が与えられる • 求職者毎に応募可能な会社の中で一番高い年収を示しなさい
  • 17. ! 問題概要 18 • 求職者の技術力、語学力、コミュ力が与えられる • 会社が採用にあたって最低限必要としている技術力、語学力、 コミュ力、その会社での年収が与えられる • 求職者毎に応募可能な会社の中で一番高い年収を示しなさい ! 制約 • 求職者数、会社数 50,000 • 技術力、語学力、コミュ力 100 • 年収 1,000,000,000
  • 18. ! サンプル 19
  • 19. ! サンプル 20
  • 20. ! 解法 21 • 線形探索した場合、の計算量は
 O(求職者数 会社数) なので、50,0002で間に合わない
 • 前計算して求職者のクエリをO(1)かO(logn)で処理したい • 技術力 語学力 コミュ力 = 1013
 →メモリに収まる!
  全てのクエリに対して前計算をする。
  • 21. ! 解法 22 • dp[a][b][c]を、技術力a、語学力b、コミュ力cの求職者が得 られる最大の年収だとすると、次が成立する。 • dp[a][b][c] ≧ max(dp[a - 1][b][c], dp[a][b - 1][c], dp[a][b][c - 1]) • つまり、自分よりも能力が劣っている求職者と同じかそれよ りも大きい年収が得られる • 会社が希望する能力をa, b, c, 年収をwとしたとき、
 dp[a][b][c] := w
 と初期化しておけば、
  • 22. ! 解法 23 • dp[i][j][k] = max(dp[i][j][k], dp[i- 1][j][k], dp[i][j- 1][k],
 dp[i][j][k- 1]) • 会社が希望する能力をa, b, c, 年収をwとしたとき、
 dp[a][b][c] := w
 と初期化しておけば、 • と、i, j, kの小さいものから順にテーブルを更新することで
 求職者のクエリにO(1)で答えることが可能になる。
  • 23. ! 別解 24 • 求人会社を年収の大きい順でソート • dpの配列は0で初期化しておく • 年収の大きい会社から順に見ていき、次の操作を行う • a i, b j, c kをみたすような範囲の
 dp[i][j][k] を見て、0でないならwを代入
 0なら終了する • どのdp[a][b][c]についても、値の代入は高々1回しか起こら ないため、この操作は1013回程度で終了する。
  • 24. ! 別解イメージ(二次元版) 25
  • 25. ! 別解イメージ(二次元版) 26
  • 26. ! 別解イメージ(二次元版) 27
  • 27. ! 別解イメージ(二次元版) 28
  • 28. 29 writer: kawatea tester: amylase D: Longest Path
  • 29. ! 問題概要 30 1 4 3 2 5 • n頂点の有向な木が与えられる • いくつかの辺は好きな向きを選べる • うまく向きを選んだときの最長のパスの長さは?
  • 30. ! 考察 31 1 4 32 5 • 適当な根付き木にしてみる • 各パスはある頂点から上向きに進んで
 下向きに進む
  • 31. ! 考察 32 1 4 32 5 • 各頂点に対して上向きと下向きの最長のパスがわかると
 その頂点を中心とする最長のパスが
 求まる
  • 32. ! 考察 33 • ただし上向きと下向きのパスが同じ頂点を通らないように
 二番目に長いパスも必要 1 4 32 5
  • 33. ! 想定解法 34 • 木を適当な根付き木にする • 再帰的に頂点を探索して、各頂点以下の上向きと下向きの
 1 or 2番目に長いパスの長さを求める • 各頂点を中心とするパスが今まで見つけたものより長いなら 答えを更新する • 各頂点は再帰で一度訪れるだけなので、
 全体の計算量は O(n + m)となる
  • 34. 35 writer: Komaki tester: amylase E: Page Rank
  • 35. ! 問題概要 36 • 従業員を頂点とする有向グラフがある
 ­ 辺が優秀と思っている関係を示す
 ­ 従業員番号の差が10以上だと辺は存在しない
 • このグラフ上でPage Rankを求めてください
 ­ 定義は問題文に示してあります
  • 36. ! 要するに 37 • 連立一次方程式を解いてください • 帯行列
 ­ 非ゼロ成分の場所が対角に近いところにしかない • 正則
 ­ 転地が対角優位行列
  ・各行の対角成分の絶対値が、それ以外の成分の絶対値の
   和よりも大きい
  ・対角優位行列は正則であることが知られている
 ­ 求めるPage Rankは一意に定まる
  • 37. ! 解法1: 帯行列でのガウスの消去法 38 • ガウスの消去法の操作をだいぶサボれる
 ­ ゼロとわかっている要素は消しにいく必要がない
 ­ 行の好感が必要かもしれないが、
  行列の値は帯の幅の2倍分覚えておけば十分
 • 行列の次数をn、帯の幅をkとして、O(nk2)
 ­ n = 104
 ­ k = 10
  • 38. ! 解法2: 収束するまで回す 39 • 初期のPage Rankを1として、
 Page Rankの定義式を更新式と見なして、
 収束するまで更新を続ける
 • 疎行列なので、1回の更新が十分に速い - O(m + n) • 大体1,000回程度回せば通る
  • 39. 40 writer: rng_58 tester: kawatea F: 就職活動
  • 40. ! 問題概要 41 • N 人の人がいて、それぞれの人は {す社、ぬ社、け社}
 の部分集合への就職を希望する • す社、ぬ社、け社へはそれぞれ高々X, Y, Z 人が就職できる • 全ての人が就職できるような組み合わせは何通りあるか
 • (文字の使い方は元の問題と変えてあります)
  • 41. ! 部分点 (1) 42 • 人を7種類に分類する • す社のみを希望する人:nx 人 • ぬ社のみを希望する人:ny 人 • け社のみを希望する人:nz 人 • す、ぬを希望する人:nx,y 人 • ぬ、けを希望する人:ny,z 人 • け、すを希望する人:nz,x 人 • 全て希望する人:nx,y,z 人 とする • nx +ny +nz + nx,y +ny,z + nz,x + nx,y,z = N
  • 42. ! 部分点 (2) 43 • このとき、全ての人 が就職できるかどう かは
 右のグラフでフロー をN流せるかどうかに よって判定できる
  • 43. ! 部分点 (3) 44 • 条件をみたすすべての • (nx, ny, nz, nx,y, ny,z, nz,x, nx,y,z)の組を考え、 •             の和を求めれば良い
 • O(N6) N! nx! ny! nz! nx,y! ny,z! nz,x! nx,y,z!
  • 44. ! 満点 (1) 45 • グラフのmincutを考えると (Hall s Theoremともいわれて います) • フローをN流せる条件は
  • 45. ! 満点 (2) 46 • nx, ny, nz, nx,y を定数とみると、
 これはある定数 c1, c2, c3, を用いて次のように書ける
  • 46. ! 満点 (3) 47