結果

問題 No.3389 k-Days Later
コンテスト
ユーザー Aotori
提出日時 2025-12-26 01:22:55
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
結果
WA  
実行時間 -
コード長 1,772 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,776 ms
コンパイル使用メモリ 198,256 KB
実行使用メモリ 8,064 KB
最終ジャッジ日時 2025-12-26 01:23:15
合計ジャッジ時間 18,409 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
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];

        // 年月日に変換
        li ans_y = 0;
        li ans_m = 0;
        li ans_d = 0;
        // cout << days << endl;
        ans_y = days / D_sum[N];
        ans_y++;
        days %= D_sum[N];
        if(days == 0){
            ans_y--;
            ans_m = m[N-1];
            ans_d = D[N-1];
        } else {
            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;
            }
            ans_m = l;
            // cout << days << endl;
            days -= D_sum[ans_m-1];
            if(days == 0){
                ans_m--;
                ans_d = D[ans_m];
            } else {
                ans_d = days;
            }
        }
        
        cout << ans_y << ' ' << ans_m << ' ' << ans_d << endl;
    }

}

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