#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define INF 1000000000000 const long long MOD = 998244353; using namespace std; typedef long long llong; #define debug cout << "Hello" << endl; //int isalpha(char ch): ch がアルファベットなら true を返す //int isdigit(char ch): ch が数字なら true を返す //int islower(char ch): ch が小文字なら true を返す //int isupper(char ch): ch が大文字なら true を返す //int tolower(char ch): ch の小文字を返す //int toupper(char ch): ch の大文字を返す //string型 //size() 文字数を返す //Insert() (指定した場所に)文字・文字列を挿入する //erase() (指定した場所の)文字・文字列を削除する //clear() すべての文字を削除する //substr() 文字列の(指定した)部分文字列を返す //replace() (指定した)部分文字列を新しい文字列に置換する //c_str()変換 //文字列の比較は、<=や==などを使え //replace関数を使い、簡単に文字列を置換 //リバース関数:reverse(str.begin(), str.end()); //map dict;で宣言 //グラフ理論用変数 //vector > graph(N); //ソート //降順sort(v.begin(), v.end(), std::greater()); //大文字から小文字へんかん //w[i] = w[i]-'A'+'a'; //vector //assignメソッド 引数:サイズ、値 //与えられたサイズと値でvectorを初期化する //queueクラス //find()次に取り出す値の表示をする。 //pop()値を取り出す。戻り値はなし //push()キューに値をプッシュする //priority_queueクラス //切り上げ //ceil //floor bool check(llong A, llong B, llong C, llong N){ llong total = 0; total = (N/A)*B + (N-N/A); if(total> A >> B >> C; llong N=1000000000000000000; llong right, left; llong mid; right = N+1; left = 1; while((right-left)>1){ mid = (right+left)/2; if(check(A,B,C,mid)){ left = mid; }else{ right = mid; } } cout << right << endl; return 0; }