code formula 2014 予選a 解説

22
Code Formula 2014 予選A 解説 AtCoder株式会社 代表取締役 高橋 直大 2014/8/20 1

Upload: atcoder-inc

Post on 21-Jun-2015

1.012 views

Category:

Education


1 download

DESCRIPTION

Code Formula 2014 予選A 解説

TRANSCRIPT

Page 1: Code Formula 2014 予選A 解説

Code Formula 2014 予選A 解説

AtCoder株式会社 代表取締役

高橋 直大

2014/8/20 1

Page 2: Code Formula 2014 予選A 解説

©AtCoder Inc. All rights reserved. 2

A問題 立方数

1. 問題概要

2. アルゴリズム

2014/8/20 2

Page 3: Code Formula 2014 予選A 解説

A問題 問題概要

• 整数Nが与えられる

• Nが立方数かどうかを判定しなさい

• 制約

• 1 ≦ N ≦ 1,000,000

2014/8/20 3

Page 4: Code Formula 2014 予選A 解説

A問題 アルゴリズム

• 方針1

– Nの1/3乗を求め、整数になっているかどうかを判定する

• 整数になっているかは難しいので、最も近い整数に近似し、その整数を3乗した数がNになっているのか判定するのが良い。

• 直接求めることが可能だが、誤差に注意する必要あり。

• 方針2

– 1から100までの全ての数を3乗し、Nが存在するかどうかを判定する • Nが100万以下ということは、Nの三乗根は100以下であることを利用する

• こちらの方が確実

2014/8/20 4

Page 5: Code Formula 2014 予選A 解説

©AtCoder Inc. All rights reserved. 5

B問題 ボウリングゲーム

1. 問題概要

2. アルゴリズム

2014/8/20 5

Page 6: Code Formula 2014 予選A 解説

B問題 問題概要

• ボウリングで倒したピンが、番号で与えられる

• グラフィカルな形式に変換しなさい

2014/8/20 6

Page 7: Code Formula 2014 予選A 解説

B問題 アルゴリズム

• 長さ10の配列を用意する

– それぞれに0を入れておく

• 1投目に倒したピンの番号に対応する配列に1を入れる

• 2投目に倒したピンの番号に対応する配列に2を入れる

• それぞれのピンの場所に対して、配列の番号に合わせた文字を出力する

2014/8/20 7

Page 8: Code Formula 2014 予選A 解説

B問題 アルゴリズム

• よくある間違い

– 末尾改行を入れていない • A問題と同じく、末尾改行が必須となります。

• フォーマットを整える問題なので、フォーマットは統一しましょう。

– 出力順序を間違えている

2014/8/20 8

Page 9: Code Formula 2014 予選A 解説

©AtCoder Inc. All rights reserved. 9

C問題 決勝進出者

1. 問題概要

2. アルゴリズム

2014/8/20 9

Page 10: Code Formula 2014 予選A 解説

C問題 問題概要

• N = 4, K = 5の時

– 最初の段階で、確定するのは以下の5人

2014/8/20 10

予選A 予選B 予選C 予選D

Page 11: Code Formula 2014 予選A 解説

C問題 問題概要

• N = 4, K = 5の時

– 最初の段階で、確定するのは以下の5人

– 予選Aの結果が出ても同じ

2014/8/20 11

予選A 予選B 予選C 予選D

1

2

3

4

5

Page 12: Code Formula 2014 予選A 解説

C問題 問題概要

• N = 4, K = 5の時

– 最初の段階で、確定するのは以下の5人

– 予選B以降は、既に通過した人の分を先に回す必要がある • 該当する緑のマスが、2が被っているので、水色のマスが新規に通過枠となる。

2014/8/20 12

予選A 予選B 予選C 予選D

1 2

2 1

3 3

4 4

5 5

Page 13: Code Formula 2014 予選A 解説

C問題 問題概要

• N = 4, K = 5の時

– 最初の段階で、確定するのは以下の5人

– 予選B以降は、既に通過した人の分を先に回す必要がある • 該当する緑のマスが、2が被っているので、水色のマスが新規に通過枠となる。が、この枠も被っているので、次の通過枠に。

2014/8/20 13

予選A 予選B 予選C 予選D

1 2

2 1

3 3

4 4

5 5

Page 14: Code Formula 2014 予選A 解説

C問題 問題概要

• N = 4, K = 5の時

– 最初の段階で、確定するのは以下の5人

– 予選B以降は、既に通過した人の分を先に回す必要がある

• ここまで通過枠を動かした段階で、もう重複している人はいないため、予選Bで通過が確定していく人はいない。

2014/8/20 14

予選A 予選B 予選C 予選D

1 2

2 1

3 3

4 4

5 5

Page 15: Code Formula 2014 予選A 解説

C問題 問題概要

• N = 4, K = 5の時

– 最初の段階で、確定するのは以下の5人

– 予選B以降は、既に通過した人の分を先に回す必要がある • 予選Cでは以下のようになる。

2014/8/20 15

予選A 予選B 予選C 予選D

1 2 1

2 1 2

3 3 3

4 4 4

5 5 5

Page 16: Code Formula 2014 予選A 解説

C問題 問題概要

• N = 4, K = 5の時

– 最初の段階で、確定するのは以下の5人

– 予選B以降は、既に通過した人の分を先に回す必要がある • 予選Dでは以下のようになる。

– 説明の都合でサンプルとは少し違います。

2014/8/20 16

予選A 予選B 予選C 予選D

1 2 1 2

2 1 2 1

3 3 3 3

4 4 4 5

5 5 5 4

Page 17: Code Formula 2014 予選A 解説

C問題 アルゴリズム

• 注意点

– 実装に混乱しないようにしよう! • 実装するべきものはそんなに多くない!

– 通過枠を1つずつ確認する処理

– 通過枠を1つ増やす処理

» 増やした時、既に順位が確定していれば、そこを確認する処理も必要

– 制限時間に気を付けよう! • 通過枠を毎回頭から確認していくと、制限時間に間に合いません

– 今どこまでが通過枠になっているかを保持しておく

2014/8/20 17

Page 18: Code Formula 2014 予選A 解説

©AtCoder Inc. All rights reserved. 18

D問題 無刻印キーボード

1. 問題概要

2. アルゴリズム

2014/8/20 18

Page 19: Code Formula 2014 予選A 解説

D問題 問題概要

• キートップの書かれていないキーボードが存在する

• 文章を打ちたいが、キーを一部しか覚えていない

• 解らない際は、覚えていないキーの中からランダムに打ち、間違えた場合は消す

• ある文章を打ちたい時に、キーを打つ必要のある回数の期待値を出力せよ

• 制約

• 文字数≦50, 文字種≦36

2014/8/20 19

Page 20: Code Formula 2014 予選A 解説

D問題 アルゴリズム

• 純粋な探索は到底間に合わない。

• 動的計画法も難しい

– キーの種類は36種類

– どのキーが解っているかを記憶するには2^36通り覚える必要がある

• そこで、何か工夫する必要がある。

2014/8/20 20

Page 21: Code Formula 2014 予選A 解説

D問題 アルゴリズム

• 各キーについて注目する – 正しいタイミングで打つ必要がある回数は、打ちたい文章の出現文字数と同じ

– つまり、間違ったタイミングで打ってしまう回数の期待値を求めれば良い • 各文字について、間違えるとしても、間違える回数は高々1回

– その場合、文字を消す処理も必要なので、打つ回数は2回増える

• 間違える確率は、打たれるべき文字の前に、場所が不明な文字が何種類あるかで決まる。 – 例えば、”abc”と打ちたい時、’c’に着目すると、’a’と打ちたい時にcと打ってしまうパターンや、’b’と打ちたい時に’c’に打ってしまうパターンが存在し、それらを避けることが可能な確率は、’a’および’b’が’c’より先に見つかる確率であり、これは1/3である。

– つまり、間違えない確率は、1/(手前にある不明な種類数+1)である。 » 出現しない文字も同様であることに注意

2014/8/20 21

Page 22: Code Formula 2014 予選A 解説

D問題 アルゴリズム

• 注意点

– 動的計画法で解く場合も、残り文字数に着目すれば解けなくはない。 • だが、単純に計算した方が実装はずっとシンプルになる

– 文字数の制約が50文字までだが、もちろん10万文字などでも解ける • 制約に騙されないように!

2014/8/20 22