狠狠撸

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

More Related Content

Indeedなう A日程 解説