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: Runtime Error)

#include <math.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef unsigned long long int ull;
typedef long long int ll;
typedef long double ld;

int main(void) {
  int scan; // scanf result
  ull a; // to input 
  ull b; // to input 
  ull n; // to input 
  ull *answer;
  ull temp;

  scan = scanf("%llu", &a);
  scan = scanf("%llu", &b);
  scan = scanf("%llu", &n);

  answer = (ull *)malloc(sizeof(ull) * (n + 1));
  for (ull i = 0 ; i <= n; i++) {
    answer[i] = (ull)floor((double)((a * i) / b)) - a * (ull)floor((double)(i / b));
  }

  for (ull k = 0; k <= n; k++) {
    for (ull m = k; m <= n; m++) {
      if (answer[k] < answer[m])
      {
        temp = answer[k];
        answer[k] = answer[m];
        answer[m] = temp;
      }
    }
  }

  printf("%llu", answer[0]);
  return (0);
}