結果
| 問題 | No.3389 k-Days Later |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-11-28 23:05:27 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,395 bytes |
| コンパイル時間 | 14,758 ms |
| コンパイル使用メモリ | 393,880 KB |
| 実行使用メモリ | 10,220 KB |
| 最終ジャッジ日時 | 2025-11-28 23:06:01 |
| 合計ジャッジ時間 | 25,884 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 6 WA * 22 |
コンパイルメッセージ
warning: value assigned to `k` is never read --> src/main.rs:46:5 | 46 | k -= ans_d; | ^ | = help: maybe it is overwritten before being read? = note: `#[warn(unused_assignments)]` on by default
ソースコード
use proconio::input;
fn main() {
input! {
n: usize,
d: [usize; n],
}
// dの累積和を計算
let mut acc_d = vec![0; n+1];
for i in 0..n {
acc_d[i+1] = acc_d[i] + d[i];
}
input! {
q: usize,
}
for _ in 0..q {
solve(n, &&acc_d);
}
}
fn solve(n: usize, acc_d: &Vec<usize>) {
input! {
y: usize, m: usize, d: usize,
mut k: usize,
}
// 年月日を日数に換算
let add_d = (y-1) * acc_d[n] + acc_d[m-1] + d-1;
// 日数を加算
k += add_d;
// 年
let ans_y = k / acc_d[n];
k -= ans_y * acc_d[n];
// 月
let ans_m = below_bound(acc_d, k);
k -= acc_d[ans_m];
// 日
let ans_d = k;
k -= ans_d;
println!("{} {} {}", ans_y+1, ans_m+1, ans_d+1);
}
const INFS: usize = 1 << 60;
// 二分探索
// val以下の最大のposを返す。0番目より小さい値では異常値として、「1<<60」を返す
pub fn below_bound<T: std::cmp::PartialOrd>(vec: &Vec<T>, val: T) -> usize {
let mut l = 0;
let mut r = vec.len();
while r - l > 0 {
let m = (l + r) / 2;
if vec[m] <= val {
l = m + 1;
} else {
r = m;
}
}
if l == 0 { INFS } else {l-1}
}
/*
5
2 3 5 7 8
1
23 5 7 8
5
1 1 2 1
1 2 1 2
1 1 1 25
23 5 7 8
271828182845904523 5 3 602874713526624977
*/