-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy path10375.go
More file actions
40 lines (33 loc) · 738 Bytes
/
10375.go
File metadata and controls
40 lines (33 loc) · 738 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// UVa 10375 - Choose and divide
package main
import (
"fmt"
"math/big"
"os"
)
const max = 10000
var f = func() []big.Float {
f := make([]big.Float, max)
for i, p := 1, big.NewFloat(1); i < max; i++ {
f[i].Set(p.Mul(p, big.NewFloat(float64(i))))
}
return f
}()
func solve(p, q, r, s int) float64 {
var ans big.Float
v, _ := ans.Mul(&f[p], &f[r-s]).Mul(&ans, &f[s]).Quo(&ans, &f[r]).Quo(&ans, &f[p-q]).Quo(&ans, &f[q]).Float64()
return v
}
func main() {
in, _ := os.Open("10375.in")
defer in.Close()
out, _ := os.Create("10375.out")
defer out.Close()
var p, q, r, s int
for {
if _, err := fmt.Fscanf(in, "%d%d%d%d", &p, &q, &r, &s); err != nil {
break
}
fmt.Fprintf(out, "%.5f\n", solve(p, q, r, s))
}
}