Problem:
Score : 400 points

Problem Statement

Snuke has one biscuit and zero Japanese yen (the currency) in his pocket.
He will perform the following operations exactly K times in total, in the order he likes:

Hit his pocket, which magically increases the number of biscuits by one.

Exchange A biscuits to 1 yen.

Exchange 1 yen to B biscuits.

Find the maximum possible number of biscuits in Snuke's pocket after K operations.

Constraints

1 \leq K,A,B \leq 10^9

K,A and B are integers.

Input

Input is given from Standard Input in the following format:

K A B

Output

Print the maximum possible number of biscuits in Snuke's pocket after K operations.

Sample Input 1

4 2 6

Sample Output 1

7

The number of biscuits in Snuke's pocket after K operations is maximized as follows:

Hit his pocket. Now he has 2 biscuits and 0 yen.

Exchange 2 biscuits to 1 yen. his pocket. Now he has 0 biscuits and 1 yen.

Hit his pocket. Now he has 1 biscuits and 1 yen.

Exchange 1 yen to 6 biscuits. his pocket. Now he has 7 biscuits and 0 yen.

Sample Input 2

7 3 4

Sample Output 2

8

Sample Input 3

314159265 35897932 384626433

Sample Output 3

48518828981938099

Solution in C (GCC 5.4.1) (judge verdict: Accepted)

#include<stdio.h>
int main(void)
{
  long long int k,a,b,num=1;
  scanf("%lld%lld%lld",&k,&a,&b);
  while(k>0)
  {
    if(k==1)
    {
      num++;
      k--;
     //printf("a");
    }
    else if(b<=a)
    {

      num=num+k;
      k=0;
      //printf("b");
    }
    else if(((num/a)*b-(num/a)*a)<3)
    {
      if((b-a)==1)
      {
        if(k>=(3*a-num))
        {
        
        k=k-(3*a-num);
          num=3*a;
        }
        else 
        {
          num=num+k;
      k=0;
        }
        
      }
      else if((b-a)==2)
      {
        if(k>=(2*a-num))
        {
          
          k=k-(2*a-num);
          num=2*a;
        }
         else 
        {
          num=num+k;
      k=0;
        }
      }
      else
      {
        if(k>=(a-num))
        {
          
          k=k-(a-num);
          num=a;
        }
        else 
        {
          num=num+k;
      k=0;
        }
      }
      
      
    // printf("C");
    }
    else
    {
      num=num+((num/a)*b-(num/a)*a)*(k/2);
      k=k-(k/2)*2;
     //printf("d");
    }
  }
  printf("%lld",num);
  return 0;
}