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>
# define speed ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0)
# pragma GCC target("avx2")
# pragma GCC optimize("O3")
# pragma GCC optimize("unroll-loops")
# define int long long
  
using namespace std;
  
const int N = 1e7 + 7;
const int mod = 1e9 + 7;

int32_t main() {
    speed;
    int a, b, n;
    cin >> a >> b >> n;
    int mx = (a*n)/b - a * (n/b);
    for ( int x = 1; x <= min( 10000000ll, n ); x++ ) {
    	mx = max( mx, (a*x) / b - a * (x/b) );
    }
    for ( int x = n; x >= max( 1ll, n - 10000000ll ); x-- ) {
    	mx = max( mx, (a*x) / b - a * (x/b) );
    }
   	int cnt = 0;
    for ( int x = 10000001; x <= n; x += 1000 ) {
    	mx = max( mx, (a*x) / b - a * (x/b) );
    	cnt++;
    	if ( cnt >= N ) {
    		break;
    	}
    }
    cnt = 0;
    for ( int x = max( 1ll, n - N ); x >= 1; x -= 1000 ) {
    	mx = max( mx, (a*x) / b - a * (x/b) );
    	cnt++;
    	if ( cnt > N ) {
    		break;
    	}
    }
    for ( int x = 10000001; x <= n; x += 100000 ) {
    	mx = max( mx, (a*x) / b - a * (x/b) );
    }
    cout << mx;
}