結果

問題 No.3397 Max Weighted Floor of Linear
コンテスト
ユーザー Araya Luanseng
提出日時 2026-07-19 21:50:41
言語 C++17
(gcc 15.2.0 + boost 1.90.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
MLE  
実行時間 -
コード長 1,646 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,116 ms
コンパイル使用メモリ 209,824 KB
実行使用メモリ 1,307,520 KB
最終ジャッジ日時 2026-07-19 21:51:31
合計ジャッジ時間 3,559 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge2_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2 MLE * 1
other MLE * 1 -- * 22
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

constexpr ll INF = 1e18;

// ll floordiv(ll x, ll y) {
//     return x >= 0 ? x/y : -((-x)/y);
// }

ll solve(ll N, ll M, ll A, ll B, ll C, ll D) {
    // cout << N << " " << M << " " << A << " " << B << " " << C << " " << D << '\n';
    ll at_zero = B*(D/M);
    if (N <= 0) return -INF;
    if (N == 1) return at_zero;
    
    if (C == 0 || M == 1) {
        return max(at_zero, A*(N-1) + B*((C*(N-1) + D)/M));
    }
    
    if (A < 0) {
        // left endpoint
        ll nxt_N = (C*(N-1)+D)/M - D/M;
        
        if (nxt_N == 0) {
            return at_zero;
        }
        
        // cout << -A*additional << "\n";
        
        return max(
            at_zero,
            B*(D/M + 1) + solve(nxt_N, C, B, A, M, M*(D/M + 1) - D + C - 1)
        );
    } else {
        // right endpoint
        ll nxt_N = (C*(N-1)+D)/M;
        ll nxt_M = C;
        ll nxt_C = M;
        ll nxt_D = M-D-1;
        ll additional = 0;
        
        if (nxt_D < 0) {
            additional = (-nxt_D)/nxt_M + 1;
            nxt_D += additional*nxt_M;
        }
        
        // cout << -A*additional << "\n";
        
        return max(
            A*(N-1) + B*((C*(N-1) + D) / M),
            solve(nxt_N, nxt_M, B, A, nxt_C, nxt_D) - A*additional
        );
    }
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    
    int T;
    cin >> T;
    
    while (T--) {
        ll N, M, A, B, C, D;
        cin >> N >> M >> A >> B >> C >> D;
        cout << solve(N, M, A, B, C, D) << "\n";
        // cout << "===\n";
    }
    
    return 0;
}
0