結果
| 問題 | No.555 世界史のレポート |
| コンテスト | |
| ユーザー |
hiyokko2
|
| 提出日時 | 2017-08-11 23:57:35 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,041 bytes |
| コンパイル時間 | 1,353 ms |
| コンパイル使用メモリ | 157,988 KB |
| 実行使用メモリ | 6,824 KB |
| 最終ジャッジ日時 | 2024-10-12 22:16:14 |
| 合計ジャッジ時間 | 2,043 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 6 WA * 14 |
ソースコード
#include <bits/stdc++.h>
#define FOR(i,bg,ed) for(ll i=(bg);i<(ed);i++)
#define REP(i,n) FOR(i,0,n)
#define MOD 1000000007
#define int long long
using namespace std;
typedef long long ll;
typedef vector<vector<ll>> mat;
const int INF = 1e9;
int N;
int C, V;
//X:コピーの回数 Y:ペーストの回数 でN文字以上を作れるか
bool checkXY(int X, int Y)
{
int tmp = min(X, Y);
//int can = 1, clip = (X > 0 ? 1 : 0);
int can = 1, clip = 0;
REP(i,tmp) {
can *= 2;
clip = can / 2;
}
can += clip * (Y - tmp);
return N <= can;
}
//vのコストで作れるか
bool checkV(int v)
{
for (int x=1; x<=v/C; x++) {
if (v - C * x < 0) break;
int y = (v - C * x) / V;
if (checkXY(x, y)) return true;
}
return false;
}
signed main()
{
cin >> N;
cin >> C >> V;
int lb = 0, ub = LONG_LONG_MAX;
while (ub - lb > 1) {
int mid = (lb + ub) / 2;
if (checkV(mid)) ub = mid;
else lb = mid;
}
cout << ub << endl;
}
hiyokko2