結果
| 問題 |
No.3045 反復重み付き累積和
|
| コンテスト | |
| ユーザー |
titia
|
| 提出日時 | 2025-03-06 03:01:39 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,141 bytes |
| コンパイル時間 | 13,516 ms |
| コンパイル使用メモリ | 394,876 KB |
| 実行使用メモリ | 41,888 KB |
| 最終ジャッジ日時 | 2025-03-06 03:02:02 |
| 合計ジャッジ時間 | 20,716 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 4 TLE * 1 -- * 36 |
コンパイルメッセージ
warning: unused variable: `i`
--> src/main.rs:58:13
|
58 | for i in 1..=n {
| ^ help: if this is intentional, prefix it with an underscore: `_i`
|
= note: `#[warn(unused_variables)]` on by default
ソースコード
use std::io;
const MOD: i64 = 998244353;
fn mod_pow(base: i64, exp: i64, modulus: i64) -> i64 {
let mut result = 1;
let mut base = base % modulus;
let mut exp = exp;
while exp > 0 {
if exp % 2 == 1 {
result = result * base % modulus;
}
base = base * base % modulus;
exp /= 2;
}
result
}
fn prod(a: &Vec<Vec<i64>>, b: &Vec<Vec<i64>>, k: usize, l: usize, m: usize) -> Vec<Vec<i64>> {
let mut c = vec![vec![0; m]; k];
for i in 0..k {
for j in 0..m {
let mut ans = 0;
for pl in 0..l {
ans = (ans + a[i][pl] * b[pl][j]) % MOD;
}
c[i][j] = ans;
}
}
c
}
fn main() {
let mut input = String::new();
io::stdin().read_line(&mut input).unwrap();
let nums: Vec<usize> = input.trim().split_whitespace().map(|x| x.parse().unwrap()).collect();
let (n, q) = (nums[0], nums[1]);
input.clear();
io::stdin().read_line(&mut input).unwrap();
let mut a: Vec<Vec<i64>> = vec![input.trim().split_whitespace().map(|x| x.parse().unwrap()).collect()];
for _ in 0..q {
input.clear();
io::stdin().read_line(&mut input).unwrap();
let l: Vec<i64> = input.trim().split_whitespace().map(|x| x.parse().unwrap()).collect();
if l[0] == 2 {
let x = (l[1] - 1) as usize;
println!("{}", a[0][x]);
continue;
}
let (k, x) = (l[1], l[2]);
let mut l_vec = vec![1i64];
let (mut bunshi, mut bunbo) = (x, 1);
for i in 1..=n {
let now = *l_vec.last().unwrap();
l_vec.push(now * k * bunshi % MOD * mod_pow(bunbo, MOD - 2, MOD) % MOD);
bunshi += 1;
bunbo += 1;
}
let mut x_mat = vec![vec![0; n]; n];
for i in 0..n {
for j in 0..n {
if i + j < n {
x_mat[i][i + j] = l_vec[j];
} else {
break;
}
}
}
a = prod(&a, &x_mat, 1, n, n);
}
}
titia