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 C++ (GCC 9.2.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")

#define REP(i, n) for (int i = 0; i < n; i++)
#define FOR(i, m, n) for (int i = m; i < n; i++)

using ll = long long;
using ull = unsigned long long;
using namespace std;

int main() {
    ll A, B, N, result, tmp3, x;
    cin >> A >> B >> N;
    /*if (N < B) {
        int x = N;
        double tmp1 = A * x / B * 1.0;
        double tmp2 = x / B * 1.0;
        result = tmp1 - A * tmp2;
    } else {
        int x = N;
        double tmp1 = A * x / B * 1.0;
        double tmp2 = x / B * 1.0;
        result = tmp1 - A * tmp2;
        FOR(x, B-1, N+1) {
            double tmp1 = A * x / B * 1.0;
            double tmp2 = x / B * 1.0;
            tmp3 = tmp1 - A * tmp2;
            if (tmp3 > result) {
                result = tmp3;
            }
        }
    }*/
    if (N < B) {
        x = N;
    } else {
        x = B-1;
    }
    double tmp1 = A * x / B * 1.0;
    double tmp2 = x / B * 1.0;
    result = tmp1 - A * tmp2;
    cout << result << endl;
    return 0;
}