Problem:
Score : 400 points

Problem Statement

Given are integers A, B, and N.

Find the maximum possible value of floor(Ax/B) - A × floor(x/B) for a non-negative integer x not greater than N.

Here floor(t) denotes the greatest integer not greater than the real number t.

Constraints

1 ≤ A ≤ 10^{6}

1 ≤ B ≤ 10^{12}

1 ≤ N ≤ 10^{12}

All values in input are integers.

Input

Input is given from Standard Input in the following format:

A B N

Output

Print the maximum possible value of floor(Ax/B) - A × floor(x/B) for a non-negative integer x not greater than N, as an integer.

Sample Input 1

5 7 4

Sample Output 1

2

When x=3, floor(Ax/B)-A×floor(x/B) = floor(15/7) - 5×floor(3/7) = 2. This is the maximum value possible.

Sample Input 2

11 10 9

Sample Output 2

9

Solution in Kotlin (1.3.71) (judge verdict: Wrong Answer)

fun main(args: Array<String>) {
    val (a, b, n) = readLine()!!.split(' ').map { it.toLong() }

    fun calc(a: Long, b:Long, x:Long):Long {
        val ad = a.toDouble()
        val bd = b.toDouble()
        val xd = x.toDouble()
        val ret = (Math.floor(ad * xd / bd) - ad * Math.floor(xd / bd)).toLong()
        return ret
    }

    fun search(li: Long, ri:Long):Long {
        var l = li
        var r = ri
        var m = ((l-1)+(r+1))/2
        var max = Math.max(calc(a,b,l),calc(a,b,r))
        while (r-l > 0) {
            val c = calc(a,b,m)
            val ll = calc(a,b,(l+m)/2)
            val rr = calc(a,b,(m+r)/2)
            max = Math.max(max, Math.max(Math.max(ll,rr),c))
            if (ll > rr) {
                r = m
            } else if (ll < rr) {
                l = m
            } else break
            m = (l+r)/2
        }
        return max
    }
    val l = 0L
    val r = n
    val m = ((l-1)+(r+1))/2
    var max = search(l,r)
    max = Math.max(max, search(l,m))
    max = Math.max(max, search(m,r))
    println(max)
}