結果
問題 | No.46 はじめのn歩 |
ユーザー |
|
提出日時 | 2021-07-09 20:41:35 |
言語 | Go (1.23.4) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,860 bytes |
コンパイル時間 | 13,407 ms |
コンパイル使用メモリ | 225,440 KB |
実行使用メモリ | 14,016 KB |
最終ジャッジ日時 | 2024-07-01 14:07:39 |
合計ジャッジ時間 | 20,240 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | WA * 4 TLE * 1 -- * 5 |
ソースコード
package mainimport ("bufio""fmt""math""os""sort")var reader = bufio.NewReader(os.Stdin)var writer = bufio.NewWriter(os.Stdout)func getDegArgument(x, y float64) float64 {return math.Atan2(y, x) * 180.0 / math.Pi}func min(arg ...float64) float64 {min := arg[0]for _, x := range arg {if min > x {min = x}}return min}func max(arg ...float64) float64 {max := arg[0]for _, x := range arg {if max < x {max = x}}return max}func lowerBound(value, boader float64) bool {return boader <= value}func binarySearch(a []float64, boader float64, criteria func(value, boader float64) bool) int {abs := func(x int) int {if x >= 0 {return x} else {return x * -1}}ng := -1ok := len(a)for abs(ok-ng) > 1 {mid := (ok + ng) / 2if criteria(a[mid], boader) {ok = mid} else {ng = mid}}return ok}func main() {defer writer.Flush()var n intfmt.Fscan(reader, &n)var x = make([]float64, n)var y = make([]float64, n)for i := 0; i < n; i++ {fmt.Fscan(reader, &x[i])fmt.Fscan(reader, &y[i])}ans := 0.0for i := 0; i < n; i++ {args := make([]float64, 0, n-1)for j := 0; j < n; j++ {if i == j {continue}ex, ey := x[j]-x[i], y[j]-y[i]args = append(args, getDegArgument(ex, ey))}sort.Slice(args, func(i, j int) bool { return args[i] <= args[j] })for _, arg := range args {pairArg := argif pairArg >= 0.0 {pairArg -= 180.0} else {pairArg += 180.0}idx := binarySearch(args, pairArg, lowerBound)var angle float64if idx == len(args) {angle = min(math.Abs(args[idx-1]-arg), 360.0-math.Abs(args[idx-1]-arg))} else {angle = min(math.Abs(args[idx]-arg), 360.0-math.Abs(args[idx]-arg))}ans = max(ans, angle)}}fmt.Fprintf(writer, "%v\n", ans)}