結果

問題 No.3389 k-Days Later
コンテスト
ユーザー Aotori
提出日時 2025-12-26 04:13:42
言語 C++17
(gcc 15.2.0 + boost 1.89.0)
結果
WA  
実行時間 -
コード長 1,682 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 5,675 ms
コンパイル使用メモリ 197,992 KB
実行使用メモリ 7,936 KB
最終ジャッジ日時 2025-12-26 04:14:11
合計ジャッジ時間 18,830 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 6 WA * 22
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;
using li = long 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);
    D_sum[0] = 0;
    for(int i = 1; i < N+1; i++){
        D_sum[i] = D_sum[i-1] + D[i];
    }

    li y_days = D_sum[N];

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

        // cout << days << endl;

        // 年月日に変換
        li ans_y = 0;
        li ans_m = 0;
        li ans_d = 0;
        
        ans_y = (days - 1) / y_days + 1;
        days -= (ans_y-1) * y_days;

        int l = 0;
        int r = N;
        int mid = (l + r) / 2;
        while(l < r){
            // cout << mid << endl;
            if(days > D_sum[mid]){
                l = mid + 1;
            } else {
                r = mid;
            }
            mid = (l + r) / 2;
        }
        ans_m = l;
        days -= D_sum[l-1];
        if(days == 0){
            ans_m -= 1;
            ans_d = D[ans_m];
            if(ans_m == 0){
                ans_y -= 1;
                ans_m = N-1;
                ans_d = D[ans_m];
            }
        } else {
            ans_d = days;
        }
        // cout << days << endl;
        
        cout << ans_y << ' ' << ans_m << ' ' << ans_d << endl;
    }

}
0