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# (Mono-mcs 6.8.0.105) (judge verdict: Wrong Answer)

using System;
using System.Collections.Generic;
using System.Linq;
// using System.Linq;

namespace easy_Atcoder
{
    class Program
    {
        static void Main(string[] args)
        {
            float[] ABN = Array.ConvertAll(Console.ReadLine().Split(),float.Parse);
            // int[] NMQ = Array.ConvertAll(Console.ReadLine().Split(),int.Parse);
            // long K = long.Parse(Console.ReadLine());
            // int[] AB = Array.ConvertAll(Console.ReadLine().Split(),int.Parse);
            // string S = Console.ReadLine();
            // int A = int.Parse(Console.ReadLine());
            // int b = int.Parse(Console.ReadLine());
            // string A = Console.ReadLine();
            // string B = Console.ReadLine();
            // var s = (new string[] { Console.ReadLine(), Console.ReadLine(), Console.ReadLine() }).Select(int.Parse);
            // int[] abc = Array.ConvertAll(Console.ReadLine().Split(),int.Parse);
            // var X = Console.ReadLine();
            // int[,] abcd = new int[NMQ[2],4];
            // int[] A = new int[NMQ[0]];
            // int[] A_num = new int[NMQ[0]];
            // for(int i = 0; i<A_num.Length;i++){
            //     A_num[i] = 0;
            // }

            // for(int i = 0; i<NMQ[2];i++){
            //     var read = Array.ConvertAll(Console.ReadLine().Split(),int.Parse);
            //     for(int j = 0; j< 4;j++){
            //         abcd[i,j] = read[j];
            //     }
            // }
            //NがBより大の時、かつABN[1]-1が0ではない時
            // float x = (ABN[2]>ABN[1])?ABN[1]-1:ABN[2];
            float x = ABN[2];//Nをいれる
            if(ABN[2]>=ABN[1]){
                if(ABN[1]-1 != 0){
                    x = ABN[1] -1;
                }else{
                    x = ABN[1];
                }
            }else{
                x = ABN[2];
            }
            int res = (int)((int)(ABN[0]*x/ABN[1]) - ABN[0]*(int)(x/ABN[1]));
            Console.WriteLine(Math.Max(res,1));
        }
    }
}