結果

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

ソースコード

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);
    for(int i = 0; i < N; 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);
    int prev = 0;
    for(int i = 0; i < N; i++){
        D_sum[i] = prev + D[i];
        prev = D_sum[i];
    }

    li y_days = D_sum[N-1];

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

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

        int l = 0;
        int r = N - 1;
        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 + 1;
        // cout << days << endl;
        ans_d = days - (l == 0 ? 0 : D_sum[l - 1]);
        
        cout << ans_y << ' ' << ans_m << ' ' << ans_d << endl;
    }

}
0