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>
#include <stdint.h>

int main(void) {
  int K, A, B;
  scanf("%d %d %d", &K, &A, &B);

  // 1st step
  uint64_t BIS = 1;
  uint64_t STEP = (A - BIS) + 2;
  if ((K < STEP) || (A >= B) || ((B-1) <= STEP)) {
    BIS += K;
    printf("%ld\n", BIS);
    return 0;
  } else {
    BIS = B;
    K -= STEP;
    //printf("BIS=%ld K=%d\n", BIS, K);
  }

  // 2nd step 
  STEP = 2;
  uint64_t LOOP = (K / STEP);
  uint64_t MOD  = (K % STEP);
  //printf("LOOP=%ld MOD=%ld\n", LOOP, MOD);
  BIS += LOOP * (uint64_t)(B - A);
  BIS += MOD;
  printf("%ld\n", BIS);
  return 0;
}