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# (.NET Core 3.1.201) (judge verdict: Time Limit Exceeded)

using System;
using System.IO;
using System.Text;
using System.Diagnostics;
using System.Collections.Generic;
using System.Linq;

namespace SubmitCS
{
    class Program
    {
        // Change standard input(when run on local machine)
        [Conditional("ON_LOCAL_ENV")]
        static void SetStandardInput()
        {
            var input_stream = new StreamReader("StandardInput.txt", Encoding.UTF8);
            Console.SetIn(input_stream);
        }

        // Read all lines from standard input
        static List<string> ReadLines()
        {
            return ReadLines(10000);
        }
        static List<string> ReadLines(int max_lines)
        {
            var lines = new List<string>();

            for(int i = 0 ; i < max_lines ; i++)
            {
                string line = Console.ReadLine();
                if (line == null)
                    break;
                else
                    lines.Add(line);
            }

            return lines;
        }

        static void Main(string[] args)
        {
            SetStandardInput();
            Algorithm();
        }

        static void Algorithm()
        {
            string[] abn = Console.ReadLine().Split(' ');
            ulong a = ulong.Parse(abn[0]);
            ulong b = ulong.Parse(abn[1]);
            ulong n = ulong.Parse(abn[2]);

            var x = new List<ulong>();
            for(ulong i = 1 ; i <= n ; i++)
            {
                x.Add(i);
            }

            var result = x.Select( x_ => operation(a, b, x_)).Max();

            Console.WriteLine(result);
        }

        static ulong operation(ulong a, ulong b, ulong x)
        {
            double n1 = Math.Truncate((double)a * (double)x / (double)b);
            double n2 = a * Math.Truncate((double)x / (double)b);
            return  (ulong)n1 - (ulong)n2;
        }

    }
}