結果
| 問題 | No.1127 変形パスカルの三角形 |
| ユーザー |
ID 21712
|
| 提出日時 | 2026-06-07 17:57:11 |
| 言語 | Go (1.26.1) |
| 結果 |
AC
|
| 実行時間 | 7 ms / 1,500 ms |
| コード長 | 2,116 bytes |
| 記録 | |
| コンパイル時間 | 16,201 ms |
| コンパイル使用メモリ | 275,568 KB |
| 実行使用メモリ | 6,400 KB |
| 最終ジャッジ日時 | 2026-06-07 17:57:32 |
| 合計ジャッジ時間 | 17,804 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge1_0 |
| 純コード判定待ち |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 30 |
ソースコード
package main
import . "fmt"
import . "math/big"
const M = 1e9+7
func main() {
var a,b,n,k int
Scan(&a,&b,&n,&k)
a %= M
b %= M
const Z int = 2e5
xs := make([]int, Z+1)
xs[0] = 1
for i := 1; i < len(xs); i++ {
xs[i] = xs[i-1]*i%M
}
ys := make([]int, len(xs))
ys[Z] = int(new(Int).ModInverse(NewInt(int64(xs[Z])), NewInt(M)).Int64())
for i := Z; i > 0; i-- {
ys[i-1] = ys[i]*i%M
}
ans1 := (xs[n-1]*ys[k-1]%M*ys[(n-1)-(k-1)]%M*a%M + xs[n-1]*ys[k-2]%M*ys[(n-1)-(k-2)]%M*b%M)%M
Println(ans1)
ans2 := 0
tb := 0
for i := 0; i < n; i++ {
t := xs[n-1]*ys[i]%M*ys[(n-1)-i]%M
e := (t*a%M+tb)%M
tb = t*b%M
ans2 = (ans2+e*e%M)%M
}
ans2 = (ans2+tb*tb%M)%M
Println(ans2)
}
/*
考察
よくわからない
サンプル1を描いてみる
a=1, b=1
1 2 3 4 5 6
1) 1 1
2) 1 2 1
3) 1 3 3 1
4) 1 4 6 4 1
5) 1 5 10 10 5 1
a=3,b=8 を描いてみる
1 2 3 4 5 6
1) 3 8
2) 3 11 8
3) 3 14 19 8
4) 3 17 33 27 8
5) 3 20 50 60 35 8
一般化
1) a b
2) a (a+b) b
3) a (a+(a+b)) ((a+b)+b) b
4) a (a+(a+(a+b))) ((a+(a+b))+((a+b)+b)) (((a+b)+b)+b) b
5) a (a+(a+(a+(a+b)))) ((a+(a+(a+b)))+((a+(a+b))+((a+b)+b))) (((a+(a+b))+((a+b)+b))+(((a+b)+b)+b)) ((((a+b)+b)+b)+b) b
整理
1) a b
2) a (a+b) b
3) a (2a+b) (a+2b) b
4) a (3a+b) (3a+3b) (a+3b) b
5) a (4a+b) (6a+4b) (4a+6b) (a+4b) b
6) a (5a+b) (10a+5b) (10a+10b) (5a+10b) (a+5b) b
7) a (6a+b) (15a+6b) (20a+15b) (15a+20b) (6a+15b) (a+6b) b
例えば 7段目
a 6a 15a 20a 15a 6a a
b 6b 15b 20b 15b 6b b
aとbそれぞれ左右対称の係数同じなのを1個ずつずらして重ねている感じ
係数はいわゆる二項係数?
二項係数を並べたやつをパスカルの三角形と呼ぶらしい
パスカルの三角形をa倍したものとb倍したものを1個ずつずらして並べたということか
二項係数(n,k)を求めa倍とb倍すればいいのかな
(n,k) = n! / (k! * (n-k)!)
二乗和は二乗して足すをやるのみ…
nの最大は2e5なので計算間に合う
*/
ID 21712