結果

問題 No.3389 k-Days Later
コンテスト
ユーザー Aotori
提出日時 2025-12-26 01:07:08
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
結果
WA  
実行時間 -
コード長 1,416 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,745 ms
コンパイル使用メモリ 198,516 KB
実行使用メモリ 8,064 KB
最終ジャッジ日時 2025-12-26 01:07:28
合計ジャッジ時間 19,782 ms
ジャッジサーバーID
(参考情報)
judge4 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other WA * 28
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;
using li = long int;

int main()
{
    int N;
    cin >> N;
    vector<li> D(N+1);
    D[0] = 0;
    for(int i = 1; i < N+1; i++){
        cin >> D[i];
    }
    int Q;
    cin >> Q;
    vector<li> y(Q);
    vector<li> m(Q);
    vector<li> d(Q);
    vector<li> k(Q);
    for(int i = 0; i < Q; i++){
        cin >> y[i] >> m[i] >> d[i] >> k[i];
    }

    vector<li> D_sum(N+1);
    int prev = 0;
    for(int i = 1; i < N+1; i++){
        D_sum[i] = prev + D[i];
        prev = D_sum[i];
    }

    for(int i = 0; i < Q; i++){
        // 日数のみに変換
        long long int days = (y[i]-1) * D_sum[N];
        days += D_sum[m[i]-1];
        days += d[i];
        days += k[i];

        // 年月日に変換
        // cout << days << endl;
        li ans_y = days / D_sum[N];
        ans_y++;
        days %= D_sum[N];
        int l = 0;
        int r = N;
        int mid = (l + r) / 2;
        while(r - l > 0){
            // cout << mid << endl;
            if(days > D_sum[mid]){
                l = mid + 1;
            } else {
                r = mid;
            }
            mid = (l + r) / 2;
        }
        li ans_m = l;
        // cout << days << endl;
        days -= D_sum[ans_m-1];
        // cout << days << endl;

        li ans_d = days;

        cout << ans_y << ' ' << ans_m << ' ' << ans_d << endl;
    }

}

/*
5
2 3 5 7 8
1
1 1 2 1
*/
0