結果
問題 |
No.3002 多項式の割り算 〜easy〜
|
ユーザー |
|
提出日時 | 2025-01-17 21:34:51 |
言語 | Rust (1.83.0 + proconio) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,271 bytes |
コンパイル時間 | 13,336 ms |
コンパイル使用メモリ | 401,912 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2025-01-17 21:35:49 |
合計ジャッジ時間 | 14,540 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 2 |
other | AC * 3 WA * 19 |
ソースコード
#![allow(unused_imports)] #![allow(unused_variables)] #![allow(non_snake_case)] use proconio::input; use proconio::marker::*; use std::cmp::*; use std::collections::*; const MOD: i64 = 1_000_000_007; fn main() { input! { A: i64, B: usize, } let (a, b) = solve(A, B); println!("{} {}", a, b); } fn solve(A: i64, B: usize) -> (i64, i64) { const VEC: [i64; 3] = [1, 1, 1]; let mut current = vec![0, 0, 1]; let mut power = B; let mut result = vec![1, 0, 0]; while power > 0 { if power % 2 == 1 { result = mul(&result, ¤t, &VEC); } current = mul(¤t, ¤t, &VEC); power /= 2; } let result = result.iter().map(|&x| (x * A) % MOD).collect::<Vec<_>>(); let a = result[1]; let b = result[0]; (a, b) } fn mul(f1: &[i64], f2: &[i64], vec: &[i64]) -> Vec<i64> { let mut result = vec![0; 5]; for i in 0..f1.len() { for j in 0..f2.len() { result[i + j] += f1[i] * f2[j]; } } for i in (3..result.len()).rev() { for j in 0..3 { result[i - 3 + j] -= result[i] * vec[j]; } } result.truncate(3); result.iter().map(|&x| ((x % MOD) + MOD) % MOD).collect() }