結果
問題 | No.147 試験監督(2) |
ユーザー | tnoda_ |
提出日時 | 2015-02-17 19:50:54 |
言語 | Go1.4 (1.4.2) |
結果 |
AC
|
実行時間 | 270 ms / 2,000 ms |
コード長 | 1,266 bytes |
コンパイル時間 | 606 ms |
コンパイル使用メモリ | 32,748 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-25 00:10:32 |
合計ジャッジ時間 | 2,227 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 270 ms
6,816 KB |
testcase_01 | AC | 265 ms
6,820 KB |
testcase_02 | AC | 265 ms
6,816 KB |
testcase_03 | AC | 1 ms
6,816 KB |
ソースコード
package main import ( "bufio" "fmt" "os" "strconv" ) var sc = bufio.NewScanner(os.Stdin) func next() string { sc.Split(bufio.ScanWords) if !sc.Scan() { panic("could not scan a word from the reader") } return sc.Text() } func nextInt() int { i, e := strconv.Atoi(next()) if e != nil { panic(e) } return i } func nextLong() int64 { i, e := strconv.ParseInt(next(), 10, 64) if e != nil { panic(e) } return i } // 10^9 + 7 const P = 1000000007 func fib(n, p int64) int64 { var a, b, c, d, e, f, g, h int64 a, b, c, d, e, f, g, h = 1, 1, 1, 0, 1, 0, 0, 1 for n > 0 { if n&1 == 1 { e, f, g, h = (a*e+b*g)%p, (a*f+b*h)%p, (c*e+d*g)%p, (c*f+d*h)%p } n >>= 1 a, b, c, d = (a*a+b*c)%p, (b*(a+d))%p, (c*(a+d))%p, (b*c+d*d)%p } return g } func decode(s string) (z int64) { for _, r := range s { z = (z*10 + int64(r-'0')) % (P - 1) } return } func pow(x, n int64) (z int64) { if x == 0 { return 0 } z = 1 for n > 0 { if n&1 > 0 { z = z * x % P } x = x * x % P n >>= 1 } return } func pat(c int64, d string) int64 { return pow(fib(c+2, P), decode(d)) } func main() { N := nextInt() res := int64(1) for i := 0; i < N; i++ { C, D := nextLong(), next() res = res * pat(C, D) % P } fmt.Println(res) }