結果
問題 | No.314 ケンケンパ |
ユーザー |
|
提出日時 | 2015-12-08 00:52:45 |
言語 | Ruby (3.4.1) |
結果 |
AC
|
実行時間 | 274 ms / 1,000 ms |
コード長 | 2,737 bytes |
コンパイル時間 | 291 ms |
コンパイル使用メモリ | 7,552 KB |
実行使用メモリ | 12,416 KB |
最終ジャッジ日時 | 2024-09-14 18:47:37 |
合計ジャッジ時間 | 3,734 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 17 |
コンパイルメッセージ
Syntax OK
ソースコード
#! ruby# yukicoder My Practice# author: Leonardone @ NEETSDKASU# 解説読後# http://yukicoder.me/problems/882/editorial=begin解説がACコード読めとあったのでACのコードをいくつか読んで要はある時点で「パ」の状態で終わっているパターン数ある時点で「ケン」の状態で終わっているパターン数ある時点で「ケンケン」の状態で終わっているパターン数これを動的計画法とやらでNの小さいほうから積み重ねていく感じらしい(?)そしてこの3種のパターン数の和が求める答えとなるということらしい初期値 N=1としてA[1] = 0 「パ」で終わっている状態B[1] = 1 「ケン」で終わっている状態C[1] = 0 「ケンケン」で終わっている状態N=2ではN=1で「パ」で終わっているパターンは次は「ケン」にN=1で「ケン」で終わっているパターンは「パ」か「ケンケン」にN=1で「ケンケン」で終わっているパターンは「パ」につまり「パ」で終わる A[2] = B[1] + C[1] = 1 + 0 = 1「ケン」で終わる B[2] = A[1] = 0「ケンケン」で終わる C[2] = B[1] = 1N=3では同様にN=2で「パ」で終わっているパターンは次は「ケン」にN=2で「ケン」で終わっているパターンは「パ」か「ケンケン」にN=2で「ケンケン」で終わっているパターンは「パ」につまり「パ」で終わる A[3] = B[2] + C[2] = 0 + 1 = 1「ケン」で終わる B[3] = A[2] = 1「ケンケン」で終わる C[3] = B[2] = 0これを繰り返していけば答えが求まるということに一般化するとA[N + 1] = B[N] + C[N]B[N + 1] = A[N]C[N + 1] = B[N]んで答えは answer = A[N] + B[N] + C[N]「パ」で終わる部分だけ和で求めるので桁が増えすぎないように mod 100000007 を行うとつまりA[N + 1] = (B[N) + C[N]) mod 100000007当然答えもmod 100000007 しておくべきanswer = (A[N] + B[N] + C[N]) mod 100000007=endn = gets.to_iMD = (10 ** 9) + 7a = 0 # n=1で「パ」で終わるパターン数b = 1 # n=1で「ケン」で終わるパターン数c = 0 # n=1で「ケンケン」で終わるパターン数2.upto(n) do# ta は A[N+1]、 aは A[N]# tb は B[N+1]、 bは B[N]# tc は C[N+1]、 cは C[N]ta = (b + c) % MD # 次に「パ」で終わるパターン数tb = a # 次に「ケン」で終わるすパターン数tc = b # 次に「ケンケン」で終わるパターン数a, b, c = ta, tb, tc # パターン数の更新endp (a + b + c) % MD