#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; const ll mod = 1000000007; #define rep(i,n) for(int i=0;i=0;i--) #define all(x) (x).begin(),(x).end() bool cond(ll x, ll A, ll B, ll C) { //A年経過したときにもらえるお小遣い = (A年目にもらえるB円) + (それまでのA-1年間にもらえる1円) //桁数が大きくなりすぎるため、掛け算を使用せずに割り算を使用。 //計算結果が小数になることも考慮してdoubleを使用。 double d1, d2 = 0; if (x < A) { d1 = 0; d2 = (double)(C - (x % A)); } else { d1 = (double)(B + (A - 1)); d2 = (double)(C - (x % A)) / (x / A); } return d1 >= d2; } int main() { ll A, B, C = 0; cin >> A >> B >> C; ll ub = 1000000000000000001; ll lb = -1; while (ub - lb > 1) { ll mid = (ub + lb) / 2; if(cond(mid, A, B, C)) { ub = mid; } else { lb = mid; } } cout << ub << endl; return 0; }