結果

問題 No.895 MESE
ユーザー MiyamonYMiyamonY
提出日時 2019-09-28 23:00:45
言語 Scheme
(Gauche-0.9.14)
結果
AC  
実行時間 1,634 ms / 2,000 ms
コード長 1,775 bytes
コンパイル時間 126 ms
コンパイル使用メモリ 6,816 KB
実行使用メモリ 37,556 KB
最終ジャッジ日時 2024-10-03 04:17:35
合計ジャッジ時間 42,853 ms
ジャッジサーバーID
(参考情報)
judge5 / judge3
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1,211 ms
26,264 KB
testcase_01 AC 1,226 ms
26,252 KB
testcase_02 AC 1,234 ms
26,372 KB
testcase_03 AC 1,229 ms
26,276 KB
testcase_04 AC 1,223 ms
26,444 KB
testcase_05 AC 1,229 ms
26,508 KB
testcase_06 AC 1,223 ms
26,384 KB
testcase_07 AC 1,232 ms
26,424 KB
testcase_08 AC 1,250 ms
26,336 KB
testcase_09 AC 1,237 ms
26,332 KB
testcase_10 AC 1,298 ms
26,512 KB
testcase_11 AC 1,225 ms
26,280 KB
testcase_12 AC 1,207 ms
26,268 KB
testcase_13 AC 1,338 ms
31,068 KB
testcase_14 AC 1,552 ms
37,548 KB
testcase_15 AC 1,538 ms
37,464 KB
testcase_16 AC 1,425 ms
31,288 KB
testcase_17 AC 1,247 ms
26,412 KB
testcase_18 AC 1,582 ms
37,424 KB
testcase_19 AC 1,592 ms
37,432 KB
testcase_20 AC 1,604 ms
37,500 KB
testcase_21 AC 1,593 ms
37,436 KB
testcase_22 AC 1,568 ms
37,492 KB
testcase_23 AC 1,600 ms
37,556 KB
testcase_24 AC 1,604 ms
37,476 KB
testcase_25 AC 1,634 ms
37,460 KB
testcase_26 AC 1,582 ms
37,492 KB
testcase_27 AC 1,572 ms
37,432 KB
testcase_28 AC 1,589 ms
37,480 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

;;; File:  main.scm
;; Author: ymiyamoto
;;
;; Created on Sat Sep 28 20:04:17 2019
;;
(define-syntax read-number
  (syntax-rules ()
    ((_ nums)
     (define-values nums
       (apply values (map string->number (string-split (read-line) #\space)))))))

(define-syntax read-numbers
  (syntax-rules ()
    ((_ as)
     (define as (map string->number (string-split (read-line) #\space))))
    ((_ as n)
     (define as (map (lambda (_) (map string->number (string-split (read-line) #\space))) (iota n))))))

(define-syntax 1+ (syntax-rules () ((_ x) (+ x 1))))

(define-syntax 1- (syntax-rules () ((_ x) (- x 1))))

(define MOD 1000000007)

(define (mod+ x y)
  (modulo (+ x y) MOD))

(define (mod* a . b)
  (fold (lambda (x acc) (modulo (* x acc) MOD)) a b))

(define (make-comb num)
  (define fact-dp (make-vector num -1))
  (define inv-fact-dp (make-vector num -1))
  (define (fact n) (vector-ref fact-dp n))
  (define (inv-fact n) (vector-ref inv-fact-dp n))

  (vector-set! fact-dp 0 1)
  (let loop ((i 1))
    (when (< i num)
      (vector-set! fact-dp i (mod* i (fact (1- i))))
      (loop (1+ i))))

  (let loop ((i 0))
    (when (< i num)
      (vector-set! inv-fact-dp i (expt-mod (fact i) (- MOD 2) MOD))
      (loop (1+ i))))

  (lambda (n k)
    (define factn (fact n))
    (define powk (inv-fact k))
    (define pownk (inv-fact (- n k)))
    (modulo (* (modulo (* factn powk) MOD) pownk) MOD)))

(define (solve)
  (define comb (make-comb (* 3 100000)))
  (read-number (a b c))

  (print (fold mod+ 0
	       (map (lambda (i)
		      (define x (comb (- (+ a b c) i 2) (1- c)))
		      (define y (comb (- (+ a b) i 1) (1- b)))
		      (define z (1- (expt-mod 2 (- (+ a b c) i 1) MOD)))
		      (modulo (* (modulo (* x y) MOD) z) MOD))
		    (iota a 1)))))

(solve)
0