結果
| 問題 |
No.180 美しいWhitespace (2)
|
| ユーザー |
tnoda_
|
| 提出日時 | 2015-04-15 16:33:55 |
| 言語 | Go (1.23.4) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,345 bytes |
| コンパイル時間 | 10,413 ms |
| コンパイル使用メモリ | 236,448 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-10-10 03:38:35 |
| 合計ジャッジ時間 | 12,225 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 28 WA * 3 |
ソースコード
package main
import (
"fmt"
)
// GR is Golden Ratio
const GR = 1.6180339
// GRSectionSearch returns z, for a minimum value of f(x) in [lb, ub], and the x.
func GRSectionSearch(lb, ub int64, f func(int64) int64, n int) (z int64, x int64) {
var x1, x2, f1, f2 int64
x1 = lb + int64(float64(ub-lb)/(GR+1))
x2 = lb + int64(float64(ub-lb)/GR)
f1, f2 = f(x1), f(x2)
for i := 0; i < n; i++ {
if f1 <= f2 {
ub = x2
x2, f2 = x1, f1
x1 = lb + int64(float64(ub-lb)/(GR+1))
f1 = f(x1)
} else {
lb = x1
x1, f1 = x2, f2
x2 = lb + int64(float64(ub-lb)/GR)
f2 = f(x2)
}
}
if f2 < f1 {
x1, f1 = x2, f2
}
return f1, x1
}
const inf64 = 1 << 62
func min(x, y int64) int64 {
if y < x {
return y
}
return x
}
func max(x, y int64) int64 {
if y > x {
return y
}
return x
}
func main() {
var N int
var A, B [1010]int64
fmt.Scan(&N)
for i := 0; i < N; i++ {
fmt.Scan(&A[i], &B[i])
}
f := func(x int64) int64 {
var maxF, minF int64
minF, maxF = inf64, -1
for i := 0; i < N; i++ {
g := A[i] + B[i]*int64(x)
maxF = max(g, maxF)
minF = min(g, minF)
}
return maxF - minF
}
z, x := GRSectionSearch(1, 1<<32, f, 50)
lb := int64(1)
for i := 0; i < 40; i++ {
d := x - lb
m := lb + d/2
if f(m) == z {
x = m
} else {
lb = m
}
}
if f(lb) > z {
lb++
}
fmt.Println(lb)
}
tnoda_