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: Wrong Answer)

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <iomanip>
#include <cmath>
#include <set>

#define PI 3.1415926535897

typedef long long ll;

using namespace std;

int main() {
	ll a, b, n;
	cin >> a >> b >> n;
	ll left = 0;
	ll right = n;

	ll temp;
	ll temp_val;
	ll temp_next_val;
	ll temp_prev_val;

	while (1) {
		temp = (left + right) / 2;
		temp_val = (ll)(a * temp / b) - a * (ll)(temp / b);
		temp_next_val = (ll)(a * (temp + 1) / b) - a * (ll)((temp + 1) / b);
		temp_prev_val = (ll)(a * (temp - 1) / b) - a * (ll)((temp - 1) / b);

		if (temp_next_val - temp_val > 0) {
			if (right - left == 1) {
				cout << temp_next_val;
				break;
			}
			left = temp;
		}
		else if (temp_prev_val - temp_val > 0 && temp != 0) {
			right = temp;
		}
		else {
			cout << temp_val;
			break;
		}
	}

}



//int main() {
//    ll n, m, q;
//    cin >> n >> m >> q;
//    ll* a = new ll[q];
//    ll* b = new ll[q];
//    ll* c = new ll[q];
//    ll* d = new ll[q];
//    
//    for (int i = 0; i < q; i++) {
//        cin >> a[i] >> b[i] >> c[i] >> d[i];
//    }
//
//    if ()
//
//    return 0;
//}