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>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

#define REP(i, n) for (int i = 0; i < (int)(n); i++)
#define FOR(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
#define FORR(i, a, b) for (int i = (int)(b)-1; i >= (int)(a); i--)

#define DEBUG(x) cout << #x << ": " << (x) << endl
#define DEBUG_VEC(v)                               \
  cerr << #v << ": ";                              \
  REP(__i, (v).size()) cerr << ((v)[__i]) << ", "; \
  cerr << endl
#define PRINT(x) cout << x << endl
#define all(x) x.begin(), x.end()
#define MM << " " <<
int main() {
  ll a, b, n;

  cin >> a >> b >> n;

  // floor(ax/b) - a*floor(x/b) を最大化

  //   for (int x = 0; x <= n; x++) {
  //     cout << x << " : " << (a * x / b) << "-" << a * (x / b) << " = "
  //          << (a * x / b) - a * (x / b) << endl;
  //   }

  // A>B 周期A
  // A<B 周期B？
  // 単調増加である
  // BもしくはAを超えない最大の


  ll ans = 0;

  for (ll x = max(0LL, n - 100); x <= n; x++) {
    if (x > n) continue;
    ans = max(ans, (a * x / b) - a * (x / b));
  }

  for (ll x = max(0LL, b - 100); x <= b+10; x++) {
    if (x > n) continue;
    ans = max(ans, (a * x / b) - a * (x / b));
  }

  for (ll x = max(0LL, a - 100); x <= a+10; x++) {
    if (x > n) continue;
    ans = max(ans, (a * x / b) - a * (x / b));
  }

  cout << ans << endl;
}