SlideShare a Scribd company logo
1 of 31
Download to read offline
AtCoder Beginner Contest 007
解説
AtCoder株式会社
2014/4/19 1
競技プログラミングを始める前に
• 競技プログラミングをやったことがない人へ
– まずはこっちのスライドを見よう!
– 過去のコンテストのスライドですが、導入説明があります。
• http://www.slideshare.net/chokudai/abc004
2014/4/19 2
©AtCoder Inc. All rights reserved. 3
A問題 植木算
2014/4/19 3
A問題 概要
• 一直線に木が並んでいる
• 木の本数が与えられる
• 隣り合う木々の間の数を数えなさい
2014/4/19 4
A問題 アルゴリズム
• 基本的なプログラムの流れ
– 標準入力から、必要な入力を受け取る
• 今回の場合は、木の本数を表す整数nを受け取る
– 問題で与えられた処理を行う
• 今回は、整数nに対して、木の間の数を算出する
– 標準出力へ、答えを出力する
2014/4/19 5
A問題 アルゴリズム
• 入力
– 1つの数字を、標準入力から受け取る
• Cであれば、scanf(“%d”, &n); など
• C++であれば、cin >> n;
• 入力の受け取り方は、下記の練習問題に記載があります。
– AtCoderで使用可能な殆どの言語に対して、入出力の方法が記述さ
れています。http://practice.contest.atcoder.jp/tasks/practice_1
2014/4/19 6
A問題 アルゴリズム
• アルゴリズム
– 木がN本あるとき(N≧1) 木の間はN-1箇所ある
– Nを読み込んでN-1を出力すると正解
2014/4/19 7
A問題 アルゴリズム
• 具体的な処理
– int ret = N – 1;
– N = N-1;
– N--;
– --N;
– 好きなのでいいです!
• もちろん出力時にN-1を出力するのもOK
• 私は入力された整数を変更したくない派なので、1番目を推奨し
ています。
2014/4/19 8
A問題 アルゴリズム
• 出力
– 求めた答えを、標準出力より出力する。
– 言語によって違います。
• printf(“%d¥n”, N); (C)
• cout << N << endl; (C++)
• System.out.println(N); (Java)
• 各言語の標準出力は、下記の練習問題に記載があります。
– http://practice.contest.atcoder.jp/tasks/practice_1
2014/4/19 9
©AtCoder Inc. All rights reserved. 10
B問題 辞書式順序
2014/4/19 10
B問題 概要
• 英小文字から成る文字列Aが与えられる
• 辞書順比較した際にAより小さい文字列を1つ
どれでもよいので出力、存在しない場合は-1を出力
2014/4/19 11
B問題 アルゴリズム
• 問題の流れ
• 入力
– 文字列Aを受け取る
• 処理
– 文字列Aより辞書順で小さい文字列を探す
• 出力
– 上記処理で見つけた文字列を出力する
– もし存在しなければ-1を出力する
2014/4/19 12
B問題 アルゴリズム
• 最も良いアルゴリズム
– “a”が一番小さいのでどんな文字列がきても”a”を出力す
ればよい
– ただしA=“a”のときはそれより小さい文字列は存在しない
ので”-1”を出力する。
• もちろんこれ以外にも色々ある
– 具体例は以下の通り
• 文字列が2文字以上の場合は、1文字減らして出力
• 1文字の場合は全探索
2014/4/19 13
©AtCoder Inc. All rights reserved. 14
C問題 幅優先探索
2014/4/19 14
C問題 概要
• 迷路とスタートとゴールが与えられる
• 上下左右に移動できるのでスタート-ゴール間の最
短距離を求めよ
2014/4/19 15
C問題 アルゴリズム
• 問題文に掛かれている通りに実装しよう!
2014/4/19 16
C問題 アルゴリズム
• 実装Q&A
– 上下左右に移動するのが面倒です!
• こんな実装をしてあげよう!
– int[] vx = { 0, 1, 0, -1};
– Int[] vy = { 1, 0, -1, 0};
– for(int i=0;i<4;i++) {
» int nx = x + vx[i];
» int ny = y + vy[i];
» …
• このように、配列を使ってあげることによって、forループで纏めて
処理することが出来ます!
2014/4/19 17
C問題 アルゴリズム
• 実装Q&A
– キューって何?
• データの出し入れが出来るデータ構造です。
• 先に入れたデータが先に出てきます。
– 具体的にはこんな感じ
• 1を入れる
• 2を入れる
• 数字を取り出す → 1が出てくる
• 3を入れる
• 4を入れる
• 数字を取り出す → 2が出てくる
– こんな感じで、データをどんどん入れて、取り出す処理を行うと、
順番に取り出せる!
2014/4/19 18
C問題 アルゴリズム
• 実装Q&A
– 僕の言語にもキューって実装されてるの?
• 大抵の言語にあります!
• C++なら#include<queue>すれば、queueが。
• JavaならJava.utilにQueueが。
– Queue<Integer> = new LinkedList<Integer>();みたいになるので注意
• C#なら、System.Collections.GenericにQueueが。
• 他の言語にもきっとあります!
– なかったら自分で実装しましょう!
• 配列で出来ます!
– 頭から順番に詰めていって、頭から取り出すだけ。
– 長い配列と、頭の場所を表す整数、最後尾の場所を表す整数、の3
つが必要
• リストでも出来ます!
2014/4/19 19
C問題 アルゴリズム
• 実装Q&A
– 場所のデータをどうやってキューに入れるの?
• 方法は3通り
• X,Yの両方のデータが持てるデータ構造を使う
– PairやTupleなど、複数のデータを入れられるものを使う
– 構造体やclassを自分で作って入れる
• 整数に押し込んでしまう。
– X * 1000 + Yなどを入れる。
– X = A / 1000; Y = A % 1000;などで取り出す。
» オーバーフローしないかどうかに注意!
» 速度がどうしても欲しい時や、メモリ消費量を抑えたい時用。競技プロ
グラミング以外では、必要な時以外は使わないように!
• キューを2個つくる!
– X用のキューとY用のキュー
2014/4/19 20
C問題 アルゴリズム
• 問題文に載っている幅優先探索を行えばよい
• キューを用いず、全てのマスに書かれている数字を
更新操作の度に確認しても今回は間に合う
• 最短手数が1000手を超える盤面も存在することに
注意せよ
• キューは自前で実装してもよいですが特にC++等は
標準でqueueクラスが存在します
2014/4/19 21
©AtCoder Inc. All rights reserved. 22
D問題 禁止された数字
2014/4/19 22
D問題 概要
• AとBが与えられる
• A以上B以下で桁に4と9を含まない数字を数える
2014/4/19 23
D問題 アルゴリズム(部分点 30点)
• 禁止された数字か判定された関数を作ることができ
たら愚直にB-A+1回のループを書けばよい
– for(int i=A; i<=B; i++)みたいな感じ。
• 30点が得れる
• ある数字が含まれているかどうかは、ABC006 A問題
でやったばっかり!
– http://abc006.contest.atcoder.jp/tasks/abc006_1
– 解説はこちらから
• http://abc006.contest.atcoder.jp/tasks/abc006_1
2014/4/19 24
D問題 アルゴリズム(4,9)
• 4,9を含むかどうか
– やり方は何通りか存在する
• nを文字列として持ち、文字4,9を含むか調べる
– Findなどの、文字列検索を行うアルゴリズムを使う
– Forループやforeachなどで1文字ずつ調べても良い
• 1ケタずつ整数として調べる。
– まず、%10を使い、1ケタ目の数字だけ取り出す
– 次に、それが4,9であれば終了し、そうでなければ、/10して次の桁に
移行する。
2014/4/19 25
D問題 アルゴリズム(4,9)
• 1ケタずつ整数として調べる。
– まず、%10を使い、1ケタ目の数字だけ取り出す
– 次に、それが4か9であれば終了し、そうでなければ、/10
して次の桁に移行する。
• 例えば、1342について調べる
– 1342 % 10 = 2 ←4や9でないので、次の値は10で割って
134
– 134 % 10 = 4 ←4なので終了
2014/4/19 26
D問題 アルゴリズム(満点)
• 動的計画法を用いる
• 0~Nに含まれる禁止された数の数をf(N)とする
• A~Bに含まれる禁止された数の数はf(B)-f(A-1)
– 例えば、87から243を求めたいなら、0~243を求めて、0~86を
引けば良い!
• f(N)を求めるためには、上位桁から、先行0を認めて各
桁毎に決めていくいわゆる桁DPが有効
• 上位桁から決めていく際に、ある桁で一度,N未満が確
定したらそれ以降はどんな値を入れても良い
(0~Nだから)
• 状態数は (桁数) *( 既に未満確定したかどうか(2通り)
• 桁数をNとして、O(N)
2014/4/19 27
D問題 アルゴリズム(満点) つづき
• 動的計画法を用いる
• たとえばF(1234)を求めるとき、
---- → 状態: (0桁目まで確定・未満フラグ: false)
1--- → 状態: (1桁目まで確定・未満フラグ: false)
12-- → 状態: (2桁目まで確定・未満フラグ: false)
10-- → 状態: (2桁目まで確定・未満フラグ: true)
11-- → 状態: (2桁目まで確定・未満フラグ: true)
108-→ 状態: (3桁目まで確定・未満フラグ: true)
101-→ 状態: (3桁目まで確定・未満フラグ: true)
こう言う感じの状態を考える
2014/4/19 28
D問題 アルゴリズム(満点) つづき
• F(1234)について考える
10--
11--
この二つは、2ケタ目まで確定した時点で、同じ扱いが
出来る!!
– 両方とも、それ以降の数字は、何を入れても良い。
• しかし、12—は、同じ扱いが出来ない!
– 34以下を残りに入れないといけない。
• これを上手いこと纏めて、処理してあげる必要があ
ります!
2014/4/19 29
D問題 アルゴリズム(満点) つづき
• 10—や、11—みたいな、「2桁目まで決まっていて」
「小さいことが確定している」状態を、dp[1][1]のよう
に表す。 (0からなので、2ケタ目は1で表す)
• 12—のような、「2桁目まで決まっていて」「小さいこ
とが確定していない」状態をdp[1][0]のように表す。
• このように、「何桁目まで確定しているか」「N未満で
あることが確定しているかどうか」の2つの状態を
使って纏めてあげることによって、簡単に計算する
ことが出来る!
2014/4/19 30
D問題 アルゴリズム(満点) つづき
• その他の解法
– 8進数を使った解法について
• 例えば、195435までの数字に対して、禁止されていない数を数えた
い
– 要するにf(195435)
• 今回のルールで使える数字は、0,1,2,3,5,6,7,8の8通りしか存在しな
い!
– 0->0, 1->1, 2->2, 3->3, 5->4, 6->5, 7->6, 8->7に変換するようにして、8進
数として扱えば、1から変換後の数字までの数がいくつあるか数えるだ
けで良い!
– じゃあ、4と9の場合はどうするの?
» F(195435)というのは、F(188888)と同じ!
» なぜなら、195435から188889は、全て9が含まれている!
» ということで、4や9を見つけたら、下の桁を全部8で埋めれば良い!
» F(12345678) = F(12338888)みたいになります!
» この処理を行った後に、先ほどの変換を行い、8進数から10進数にすれば
良い!
2014/4/19 31

More Related Content

What's hot

AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Inc.
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Inc.
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Inc.
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Inc.
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説AtCoder Inc.
 
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Inc.
 
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Inc.
 
AtCoder Regular Contest 035 解説
AtCoder Regular Contest 035 解説AtCoder Regular Contest 035 解説
AtCoder Regular Contest 035 解説AtCoder Inc.
 
AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Inc.
 
AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説AtCoder Inc.
 
Indeedなう A日程 解説
Indeedなう A日程 解説Indeedなう A日程 解説
Indeedなう A日程 解説AtCoder Inc.
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Inc.
 
AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説AtCoder Inc.
 
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説AtCoder Inc.
 
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Inc.
 

What's hot (20)

AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説AtCoder Beginner Contest 005 解説
AtCoder Beginner Contest 005 解説
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説
 
abc032
abc032abc032
abc032
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 
ABC001 解説
ABC001 解説ABC001 解説
ABC001 解説
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説CODE FESTIVAL 2014 本選 解説
CODE FESTIVAL 2014 本選 解説
 
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説
 
AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説AtCoder Beginner Contest 010 解説
AtCoder Beginner Contest 010 解説
 
AtCoder Regular Contest 035 解説
AtCoder Regular Contest 035 解説AtCoder Regular Contest 035 解説
AtCoder Regular Contest 035 解説
 
abc027
abc027abc027
abc027
 
AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説AtCoder Beginner Contest 025 解説
AtCoder Beginner Contest 025 解説
 
AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説AtCoder Beginner Contest 016 解説
AtCoder Beginner Contest 016 解説
 
Indeedなう A日程 解説
Indeedなう A日程 解説Indeedなう A日程 解説
Indeedなう A日程 解説
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説
 
Abc009
Abc009Abc009
Abc009
 
AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説AtCoder Regular Contest 031 解説
AtCoder Regular Contest 031 解説
 
AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説AtCoder Beginner Contest 017 解説
AtCoder Beginner Contest 017 解説
 

Viewers also liked

AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Inc.
 
AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説AtCoder Inc.
 
AtCoder Beginner Contest 003 解説
AtCoder Beginner Contest 003 解説AtCoder Beginner Contest 003 解説
AtCoder Beginner Contest 003 解説AtCoder Inc.
 
AtCoder Beginner Contest 019 解説
AtCoder Beginner Contest 019 解説AtCoder Beginner Contest 019 解説
AtCoder Beginner Contest 019 解説AtCoder Inc.
 
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Inc.
 
AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Inc.
 
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Inc.
 
AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Inc.
 
Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2AtCoder Inc.
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoder Inc.
 
AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Inc.
 

Viewers also liked (12)

AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
 
AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説AtCoder Beginner Contest 011 解説
AtCoder Beginner Contest 011 解説
 
AtCoder Beginner Contest 003 解説
AtCoder Beginner Contest 003 解説AtCoder Beginner Contest 003 解説
AtCoder Beginner Contest 003 解説
 
AtCoder Beginner Contest 019 解説
AtCoder Beginner Contest 019 解説AtCoder Beginner Contest 019 解説
AtCoder Beginner Contest 019 解説
 
AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説AtCoder Beginner Contest 013 解説
AtCoder Beginner Contest 013 解説
 
AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説AtCoder Beginner Contest 020 解説
AtCoder Beginner Contest 020 解説
 
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説
 
AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048
 
abc031
abc031abc031
abc031
 
Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
 
AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説AtCoder Beginner Contest 024 解説
AtCoder Beginner Contest 024 解説
 

Similar to AtCoder Beginner Contest 007 解説

AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Inc.
 
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」Shin Ise
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitYasuhiko Yamamoto
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarrayRyosuke839
 
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)AtCoder Inc.
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テストKen Morishita
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道Satoshi Sato
 
Using Deep Learning for Recommendation
Using Deep Learning for RecommendationUsing Deep Learning for Recommendation
Using Deep Learning for RecommendationEduardo Gonzalez
 
AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Inc.
 
LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門Yuichiro Kobayashi
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門Shuyo Nakatani
 
今日からできる構造学習(主に構造化パーセプトロンについて)
今日からできる構造学習(主に構造化パーセプトロンについて)今日からできる構造学習(主に構造化パーセプトロンについて)
今日からできる構造学習(主に構造化パーセプトロンについて)syou6162
 
111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッションShohei Hido
 
Unity + C#講座①
Unity + C#講座①Unity + C#講座①
Unity + C#講座①Yu Yu
 

Similar to AtCoder Beginner Contest 007 解説 (20)

AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説
 
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
すごいHaskell読書会 in 大阪 #4 「第6章 モジュール」
 
タダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
 
Tokyo r38
Tokyo r38Tokyo r38
Tokyo r38
 
不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray不遇の標準ライブラリ - valarray
不遇の標準ライブラリ - valarray
 
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第一回 講義資料(ワークスアプリケーションズ & AtCoder)
 
最近の単体テスト
最近の単体テスト最近の単体テスト
最近の単体テスト
 
Tokyo r30 beginner
Tokyo r30 beginnerTokyo r30 beginner
Tokyo r30 beginner
 
PFI Christmas seminar 2009
PFI Christmas seminar 2009PFI Christmas seminar 2009
PFI Christmas seminar 2009
 
リテラル文字列型までの道
リテラル文字列型までの道リテラル文字列型までの道
リテラル文字列型までの道
 
Using Deep Learning for Recommendation
Using Deep Learning for RecommendationUsing Deep Learning for Recommendation
Using Deep Learning for Recommendation
 
AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説
 
LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門LET2011: Rによる教育データ分析入門
LET2011: Rによる教育データ分析入門
 
Coding Interview
Coding InterviewCoding Interview
Coding Interview
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門
 
今日からできる構造学習(主に構造化パーセプトロンについて)
今日からできる構造学習(主に構造化パーセプトロンについて)今日からできる構造学習(主に構造化パーセプトロンについて)
今日からできる構造学習(主に構造化パーセプトロンについて)
 
C言語講習会1
C言語講習会1C言語講習会1
C言語講習会1
 
111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション111015 tokyo scipy2_ディスカッション
111015 tokyo scipy2_ディスカッション
 
Unity + C#講座①
Unity + C#講座①Unity + C#講座①
Unity + C#講座①
 
Iterators must-go(ja)
Iterators must-go(ja)Iterators must-go(ja)
Iterators must-go(ja)
 

More from AtCoder Inc.

Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説AtCoder Inc.
 
Chokudai Contest 001
Chokudai Contest 001Chokudai Contest 001
Chokudai Contest 001AtCoder Inc.
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Inc.
 
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説AtCoder Inc.
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Inc.
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説AtCoder Inc.
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説AtCoder Inc.
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Inc.
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説AtCoder Inc.
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説AtCoder Inc.
 
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Inc.
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説AtCoder Inc.
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Inc.
 
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Inc.
 
天下一プログラマーコンテスト2015 予選B 解説
天下一プログラマーコンテスト2015 予選B 解説天下一プログラマーコンテスト2015 予選B 解説
天下一プログラマーコンテスト2015 予選B 解説AtCoder Inc.
 
AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説AtCoder Inc.
 
天下一プログラマーコンテスト2015 予選A E問題 解説
天下一プログラマーコンテスト2015 予選A E問題 解説天下一プログラマーコンテスト2015 予選A E問題 解説
天下一プログラマーコンテスト2015 予選A E問題 解説AtCoder Inc.
 
AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Inc.
 

More from AtCoder Inc. (20)

TCO2017R1
TCO2017R1TCO2017R1
TCO2017R1
 
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
Disco Presents ディスカバリーチャンネルプログラミングコンテスト2016 本選 解説
 
Chokudai Contest 001
Chokudai Contest 001Chokudai Contest 001
Chokudai Contest 001
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説
 
MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説MUJINプログラミングチャレンジ2016 解説
MUJINプログラミングチャレンジ2016 解説
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
 
DDPC 2016 予選 解説
DDPC 2016 予選 解説DDPC 2016 予選 解説
DDPC 2016 予選 解説
 
arc047
arc047arc047
arc047
 
CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説
 
CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説CODE FESTIVAL 2015 予選B 解説
CODE FESTIVAL 2015 予選B 解説
 
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説
 
CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説CODE FESTIVAL 2015 予選A 解説
CODE FESTIVAL 2015 予選A 解説
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
 
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説
 
天下一プログラマーコンテスト2015 予選B 解説
天下一プログラマーコンテスト2015 予選B 解説天下一プログラマーコンテスト2015 予選B 解説
天下一プログラマーコンテスト2015 予選B 解説
 
AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説
 
天下一プログラマーコンテスト2015 予選A E問題 解説
天下一プログラマーコンテスト2015 予選A E問題 解説天下一プログラマーコンテスト2015 予選A E問題 解説
天下一プログラマーコンテスト2015 予選A E問題 解説
 
AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説
 

Recently uploaded

Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfoganekyokoi
 
Registration of travel agents - 'Explanation of the registration system under...
Registration of travel agents - 'Explanation of the registration system under...Registration of travel agents - 'Explanation of the registration system under...
Registration of travel agents - 'Explanation of the registration system under...oganekyokoi
 
KARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhr
KARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhrKARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhr
KARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhrRodolfFernandez1
 
What I did before opening my business..pdf
What I did before opening my business..pdfWhat I did before opening my business..pdf
What I did before opening my business..pdfoganekyokoi
 
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイントshu1108hina1020
 
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfEstablishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfoganekyokoi
 
レポートの書き方講座 [大学生初年次向けに対する講義資料] Lecture on how to write a report [lecture mater...
レポートの書き方講座 [大学生初年次向けに対する講義資料] Lecture on how to write a report [lecture mater...レポートの書き方講座 [大学生初年次向けに対する講義資料] Lecture on how to write a report [lecture mater...
レポートの書き方講座 [大学生初年次向けに対する講義資料] Lecture on how to write a report [lecture mater...yutakashikano1984
 
The first time I used CANVA to create a slide document.
The first time I used CANVA to create a slide document.The first time I used CANVA to create a slide document.
The first time I used CANVA to create a slide document.oganekyokoi
 
International Politics I - Lecture 1
International Politics I - Lecture 1International Politics I - Lecture 1
International Politics I - Lecture 1Toru Oga
 

Recently uploaded (9)

Divorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdfDivorce agreements in administrative work.pdf
Divorce agreements in administrative work.pdf
 
Registration of travel agents - 'Explanation of the registration system under...
Registration of travel agents - 'Explanation of the registration system under...Registration of travel agents - 'Explanation of the registration system under...
Registration of travel agents - 'Explanation of the registration system under...
 
KARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhr
KARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhrKARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhr
KARAPATANG PANTAO.pptxhrhrhrhrhrhrhrhrhr
 
What I did before opening my business..pdf
What I did before opening my business..pdfWhat I did before opening my business..pdf
What I did before opening my business..pdf
 
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
3年前期 交通基盤工学 第一回 ガイダンス 交通基盤工学の概要  パワーポイント
 
Establishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdfEstablishment and operation of medical corporations.pdf
Establishment and operation of medical corporations.pdf
 
レポートの書き方講座 [大学生初年次向けに対する講義資料] Lecture on how to write a report [lecture mater...
レポートの書き方講座 [大学生初年次向けに対する講義資料] Lecture on how to write a report [lecture mater...レポートの書き方講座 [大学生初年次向けに対する講義資料] Lecture on how to write a report [lecture mater...
レポートの書き方講座 [大学生初年次向けに対する講義資料] Lecture on how to write a report [lecture mater...
 
The first time I used CANVA to create a slide document.
The first time I used CANVA to create a slide document.The first time I used CANVA to create a slide document.
The first time I used CANVA to create a slide document.
 
International Politics I - Lecture 1
International Politics I - Lecture 1International Politics I - Lecture 1
International Politics I - Lecture 1
 

AtCoder Beginner Contest 007 解説

  • 1. AtCoder Beginner Contest 007 解説 AtCoder株式会社 2014/4/19 1
  • 2. 競技プログラミングを始める前に • 競技プログラミングをやったことがない人へ – まずはこっちのスライドを見よう! – 過去のコンテストのスライドですが、導入説明があります。 • http://www.slideshare.net/chokudai/abc004 2014/4/19 2
  • 3. ©AtCoder Inc. All rights reserved. 3 A問題 植木算 2014/4/19 3
  • 4. A問題 概要 • 一直線に木が並んでいる • 木の本数が与えられる • 隣り合う木々の間の数を数えなさい 2014/4/19 4
  • 5. A問題 アルゴリズム • 基本的なプログラムの流れ – 標準入力から、必要な入力を受け取る • 今回の場合は、木の本数を表す整数nを受け取る – 問題で与えられた処理を行う • 今回は、整数nに対して、木の間の数を算出する – 標準出力へ、答えを出力する 2014/4/19 5
  • 6. A問題 アルゴリズム • 入力 – 1つの数字を、標準入力から受け取る • Cであれば、scanf(“%d”, &n); など • C++であれば、cin >> n; • 入力の受け取り方は、下記の練習問題に記載があります。 – AtCoderで使用可能な殆どの言語に対して、入出力の方法が記述さ れています。http://practice.contest.atcoder.jp/tasks/practice_1 2014/4/19 6
  • 7. A問題 アルゴリズム • アルゴリズム – 木がN本あるとき(N≧1) 木の間はN-1箇所ある – Nを読み込んでN-1を出力すると正解 2014/4/19 7
  • 8. A問題 アルゴリズム • 具体的な処理 – int ret = N – 1; – N = N-1; – N--; – --N; – 好きなのでいいです! • もちろん出力時にN-1を出力するのもOK • 私は入力された整数を変更したくない派なので、1番目を推奨し ています。 2014/4/19 8
  • 9. A問題 アルゴリズム • 出力 – 求めた答えを、標準出力より出力する。 – 言語によって違います。 • printf(“%d¥n”, N); (C) • cout << N << endl; (C++) • System.out.println(N); (Java) • 各言語の標準出力は、下記の練習問題に記載があります。 – http://practice.contest.atcoder.jp/tasks/practice_1 2014/4/19 9
  • 10. ©AtCoder Inc. All rights reserved. 10 B問題 辞書式順序 2014/4/19 10
  • 11. B問題 概要 • 英小文字から成る文字列Aが与えられる • 辞書順比較した際にAより小さい文字列を1つ どれでもよいので出力、存在しない場合は-1を出力 2014/4/19 11
  • 12. B問題 アルゴリズム • 問題の流れ • 入力 – 文字列Aを受け取る • 処理 – 文字列Aより辞書順で小さい文字列を探す • 出力 – 上記処理で見つけた文字列を出力する – もし存在しなければ-1を出力する 2014/4/19 12
  • 13. B問題 アルゴリズム • 最も良いアルゴリズム – “a”が一番小さいのでどんな文字列がきても”a”を出力す ればよい – ただしA=“a”のときはそれより小さい文字列は存在しない ので”-1”を出力する。 • もちろんこれ以外にも色々ある – 具体例は以下の通り • 文字列が2文字以上の場合は、1文字減らして出力 • 1文字の場合は全探索 2014/4/19 13
  • 14. ©AtCoder Inc. All rights reserved. 14 C問題 幅優先探索 2014/4/19 14
  • 15. C問題 概要 • 迷路とスタートとゴールが与えられる • 上下左右に移動できるのでスタート-ゴール間の最 短距離を求めよ 2014/4/19 15
  • 17. C問題 アルゴリズム • 実装Q&A – 上下左右に移動するのが面倒です! • こんな実装をしてあげよう! – int[] vx = { 0, 1, 0, -1}; – Int[] vy = { 1, 0, -1, 0}; – for(int i=0;i<4;i++) { » int nx = x + vx[i]; » int ny = y + vy[i]; » … • このように、配列を使ってあげることによって、forループで纏めて 処理することが出来ます! 2014/4/19 17
  • 18. C問題 アルゴリズム • 実装Q&A – キューって何? • データの出し入れが出来るデータ構造です。 • 先に入れたデータが先に出てきます。 – 具体的にはこんな感じ • 1を入れる • 2を入れる • 数字を取り出す → 1が出てくる • 3を入れる • 4を入れる • 数字を取り出す → 2が出てくる – こんな感じで、データをどんどん入れて、取り出す処理を行うと、 順番に取り出せる! 2014/4/19 18
  • 19. C問題 アルゴリズム • 実装Q&A – 僕の言語にもキューって実装されてるの? • 大抵の言語にあります! • C++なら#include<queue>すれば、queueが。 • JavaならJava.utilにQueueが。 – Queue<Integer> = new LinkedList<Integer>();みたいになるので注意 • C#なら、System.Collections.GenericにQueueが。 • 他の言語にもきっとあります! – なかったら自分で実装しましょう! • 配列で出来ます! – 頭から順番に詰めていって、頭から取り出すだけ。 – 長い配列と、頭の場所を表す整数、最後尾の場所を表す整数、の3 つが必要 • リストでも出来ます! 2014/4/19 19
  • 20. C問題 アルゴリズム • 実装Q&A – 場所のデータをどうやってキューに入れるの? • 方法は3通り • X,Yの両方のデータが持てるデータ構造を使う – PairやTupleなど、複数のデータを入れられるものを使う – 構造体やclassを自分で作って入れる • 整数に押し込んでしまう。 – X * 1000 + Yなどを入れる。 – X = A / 1000; Y = A % 1000;などで取り出す。 » オーバーフローしないかどうかに注意! » 速度がどうしても欲しい時や、メモリ消費量を抑えたい時用。競技プロ グラミング以外では、必要な時以外は使わないように! • キューを2個つくる! – X用のキューとY用のキュー 2014/4/19 20
  • 21. C問題 アルゴリズム • 問題文に載っている幅優先探索を行えばよい • キューを用いず、全てのマスに書かれている数字を 更新操作の度に確認しても今回は間に合う • 最短手数が1000手を超える盤面も存在することに 注意せよ • キューは自前で実装してもよいですが特にC++等は 標準でqueueクラスが存在します 2014/4/19 21
  • 22. ©AtCoder Inc. All rights reserved. 22 D問題 禁止された数字 2014/4/19 22
  • 23. D問題 概要 • AとBが与えられる • A以上B以下で桁に4と9を含まない数字を数える 2014/4/19 23
  • 24. D問題 アルゴリズム(部分点 30点) • 禁止された数字か判定された関数を作ることができ たら愚直にB-A+1回のループを書けばよい – for(int i=A; i<=B; i++)みたいな感じ。 • 30点が得れる • ある数字が含まれているかどうかは、ABC006 A問題 でやったばっかり! – http://abc006.contest.atcoder.jp/tasks/abc006_1 – 解説はこちらから • http://abc006.contest.atcoder.jp/tasks/abc006_1 2014/4/19 24
  • 25. D問題 アルゴリズム(4,9) • 4,9を含むかどうか – やり方は何通りか存在する • nを文字列として持ち、文字4,9を含むか調べる – Findなどの、文字列検索を行うアルゴリズムを使う – Forループやforeachなどで1文字ずつ調べても良い • 1ケタずつ整数として調べる。 – まず、%10を使い、1ケタ目の数字だけ取り出す – 次に、それが4,9であれば終了し、そうでなければ、/10して次の桁に 移行する。 2014/4/19 25
  • 26. D問題 アルゴリズム(4,9) • 1ケタずつ整数として調べる。 – まず、%10を使い、1ケタ目の数字だけ取り出す – 次に、それが4か9であれば終了し、そうでなければ、/10 して次の桁に移行する。 • 例えば、1342について調べる – 1342 % 10 = 2 ←4や9でないので、次の値は10で割って 134 – 134 % 10 = 4 ←4なので終了 2014/4/19 26
  • 27. D問題 アルゴリズム(満点) • 動的計画法を用いる • 0~Nに含まれる禁止された数の数をf(N)とする • A~Bに含まれる禁止された数の数はf(B)-f(A-1) – 例えば、87から243を求めたいなら、0~243を求めて、0~86を 引けば良い! • f(N)を求めるためには、上位桁から、先行0を認めて各 桁毎に決めていくいわゆる桁DPが有効 • 上位桁から決めていく際に、ある桁で一度,N未満が確 定したらそれ以降はどんな値を入れても良い (0~Nだから) • 状態数は (桁数) *( 既に未満確定したかどうか(2通り) • 桁数をNとして、O(N) 2014/4/19 27
  • 28. D問題 アルゴリズム(満点) つづき • 動的計画法を用いる • たとえばF(1234)を求めるとき、 ---- → 状態: (0桁目まで確定・未満フラグ: false) 1--- → 状態: (1桁目まで確定・未満フラグ: false) 12-- → 状態: (2桁目まで確定・未満フラグ: false) 10-- → 状態: (2桁目まで確定・未満フラグ: true) 11-- → 状態: (2桁目まで確定・未満フラグ: true) 108-→ 状態: (3桁目まで確定・未満フラグ: true) 101-→ 状態: (3桁目まで確定・未満フラグ: true) こう言う感じの状態を考える 2014/4/19 28
  • 29. D問題 アルゴリズム(満点) つづき • F(1234)について考える 10-- 11-- この二つは、2ケタ目まで確定した時点で、同じ扱いが 出来る!! – 両方とも、それ以降の数字は、何を入れても良い。 • しかし、12—は、同じ扱いが出来ない! – 34以下を残りに入れないといけない。 • これを上手いこと纏めて、処理してあげる必要があ ります! 2014/4/19 29
  • 30. D問題 アルゴリズム(満点) つづき • 10—や、11—みたいな、「2桁目まで決まっていて」 「小さいことが確定している」状態を、dp[1][1]のよう に表す。 (0からなので、2ケタ目は1で表す) • 12—のような、「2桁目まで決まっていて」「小さいこ とが確定していない」状態をdp[1][0]のように表す。 • このように、「何桁目まで確定しているか」「N未満で あることが確定しているかどうか」の2つの状態を 使って纏めてあげることによって、簡単に計算する ことが出来る! 2014/4/19 30
  • 31. D問題 アルゴリズム(満点) つづき • その他の解法 – 8進数を使った解法について • 例えば、195435までの数字に対して、禁止されていない数を数えた い – 要するにf(195435) • 今回のルールで使える数字は、0,1,2,3,5,6,7,8の8通りしか存在しな い! – 0->0, 1->1, 2->2, 3->3, 5->4, 6->5, 7->6, 8->7に変換するようにして、8進 数として扱えば、1から変換後の数字までの数がいくつあるか数えるだ けで良い! – じゃあ、4と9の場合はどうするの? » F(195435)というのは、F(188888)と同じ! » なぜなら、195435から188889は、全て9が含まれている! » ということで、4や9を見つけたら、下の桁を全部8で埋めれば良い! » F(12345678) = F(12338888)みたいになります! » この処理を行った後に、先ほどの変換を行い、8進数から10進数にすれば 良い! 2014/4/19 31