結果
| 問題 | No.3389 k-Days Later |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2025-11-28 10:14:28 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
AC
|
| 実行時間 | 218 ms / 2,000 ms |
| コード長 | 1,085 bytes |
| コンパイル時間 | 11,624 ms |
| コンパイル使用メモリ | 404,340 KB |
| 実行使用メモリ | 11,264 KB |
| 最終ジャッジ日時 | 2025-11-28 21:03:02 |
| 合計ジャッジ時間 | 23,344 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 28 |
ソースコード
#![allow(unused)]
#![allow(non_snake_case)]
#![allow(dead_code)]
pub fn bsearch_irange<F>(mut l: usize, mut r: usize, f: F) -> usize
where
F: Fn(usize) -> bool,
{
while l < r {
let m = l + (r - l) / 2;
if f(m) {
r = m;
} else {
l = m + 1;
}
}
l
}
fn main() {
let input_str = std::io::read_to_string(std::io::stdin()).unwrap();
let mut input = input_str.split_whitespace();
let mut read_int = ||->usize {input.next().unwrap().parse().unwrap_or(0)};
let N = read_int();
let D :Vec<usize> = (0..N).map(|_| read_int()).collect();
let mut S = vec![0;N+1];
for i in 1..=N{
S[i] = S[i-1]+D[i-1];
}
let Q = read_int();
for _ in 0..Q{
let (y,m,d,mut k) = (read_int(),read_int(),read_int(),read_int());
k += S[m-1]+d-1; //y年1月1日のk日後 にする
let a = y+k/S[N];
k %= S[N];
let b = bsearch_irange(1,N+1,|x| S[x] >= k+1);
let c = k+1-S[b-1];
println!("{} {} {}",a,b,c);
}
}