結果
| 問題 | 
                            No.2099 [Cherry Alpha B] Time Machine
                             | 
                    
| コンテスト | |
| ユーザー | 
                             siman
                         | 
                    
| 提出日時 | 2022-10-17 12:54:01 | 
| 言語 | C++17(clang)  (17.0.6 + boost 1.87.0)  | 
                    
| 結果 | 
                             
                                WA
                                 
                             
                            
                         | 
                    
| 実行時間 | - | 
| コード長 | 1,277 bytes | 
| コンパイル時間 | 3,209 ms | 
| コンパイル使用メモリ | 140,304 KB | 
| 実行使用メモリ | 6,944 KB | 
| 最終ジャッジ日時 | 2024-06-28 03:16:57 | 
| 合計ジャッジ時間 | 6,579 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge2 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 56 WA * 16 | 
ソースコード
#include <cassert>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <iomanip>
#include <climits>
#include <map>
#include <queue>
#include <set>
#include <cstring>
#include <vector>
using namespace std;
typedef long long ll;
int main() {
  ll T;
  cin >> T;
  ll X, A;
  cin >> X >> A;
  ll Y, B;
  cin >> Y >> B;
  ll min_cost = LLONG_MAX;
  if (T > 0) {
    ll d = T / A;
    for (ll i = 0; i <= 10000000; ++i) {
      ll step_cnt = d + i;
      ll al = step_cnt * A;
      ll cost = X * step_cnt;
      if (cost > T) break;
      if (T < al) {
        ll over_len = al - T;
        ll back_cnt = (over_len + B - 1) / B;
        al -= B * back_cnt;
        cost += Y * back_cnt;
      }
      ll remain = T - al;
      cost += remain;
      min_cost = min(min_cost, cost);
    }
  } else {
    ll d = (abs(T) + B - 1) / B;
    for (ll i = 0; i <= 10000000; ++i) {
      ll back_cnt = d + i;
      ll bl = -1 * back_cnt * B;
      ll cost = Y * back_cnt;
      ll remain = T - bl;
      assert(remain >= 0);
      if (remain > abs(T)) break;
      ll step_cnt = remain / A;
      cost += X * step_cnt;
      remain -= A * step_cnt;
      cost += remain;
      min_cost = min(min_cost, cost);
    }
  }
  cout << min_cost << endl;
  return 0;
}
            
            
            
        
            
siman