結果

問題 No.648  お や す み 
ユーザー tsuchinaga
提出日時 2019-03-28 13:20:02
言語 Go
(1.23.4)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 683 bytes
コンパイル時間 16,427 ms
コンパイル使用メモリ 220,796 KB
実行使用メモリ 6,820 KB
最終ジャッジ日時 2024-10-12 19:25:52
合計ジャッジ時間 17,350 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 84
権限があれば一括ダウンロードができます

ソースコード

diff #

package main

import (
	"fmt"
	"math"
	"math/big"
)

func main() {
	var n int
	_, _ = fmt.Scan(&n)

	sheep := func(i int) int {
		bi1 := big.NewInt(int64(i))
		bi2 := big.NewInt(int64(i))
		bi1.Mul(bi1, bi1)
		bi1.Add(bi1, bi2)
		bi1.Div(bi1, big.NewInt(2))

		return int(bi1.Int64())
	}
	i := 0
	min, max := 1, int(math.Pow10(9))*2
	for min != max {
		i = int(math.Ceil(float64(max-min)/2)) + min
		s := sheep(i)

		if s == n {
			min, max = i, i
		} else if s > n {
			max = i - 1
		} else {
			min = i
		}

		if max == min {
			i = max
		}
		// fmt.Println(min, max, i, sheep(i), n)
	}

	if n == sheep(i) {
		fmt.Println("YES")
		fmt.Println(i)
	} else {
		fmt.Println("NO")
	}
}
0