ABC165 Aの数学的解法
https://gyazo.com/b10a9d2c4515870a4dcfc50c09426a70
最初はA以下の最大倍数を求めて、その数字(もしくはそれにKを足したもの)がA<=x<=Bであるかを調べる方法で解いた
これもO(1)
もっとシンプルなやり方がPAST本で紹介されていたのでメモnixii.icon https://gyazo.com/4fb7678d8e2b51c2054407f891960c76
解答
code:main.go
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
func solve(K int64, A int64, B int64) {
if A/K < B/K || A == A/K*K {
fmt.Println("OK")
} else {
fmt.Println("NG")
}
}
func main() {
scanner := bufio.NewScanner(os.Stdin)
const initialBufSize = 4096
const maxBufSize = 1000000
scanner.Buffer(make([]byte, initialBufSize), maxBufSize)
scanner.Split(bufio.ScanWords)
var K int64
scanner.Scan()
K, _ = strconv.ParseInt(scanner.Text(), 10, 64)
var A int64
scanner.Scan()
A, _ = strconv.ParseInt(scanner.Text(), 10, 64)
var B int64
scanner.Scan()
B, _ = strconv.ParseInt(scanner.Text(), 10, 64)
solve(K, A, B)
}