結果
問題 |
No.2709 1975 Powers
|
ユーザー |
|
提出日時 | 2025-05-29 15:22:31 |
言語 | Rust (1.83.0 + proconio) |
結果 |
TLE
|
実行時間 | - |
コード長 | 3,593 bytes |
コンパイル時間 | 16,238 ms |
コンパイル使用メモリ | 385,428 KB |
実行使用メモリ | 52,736 KB |
最終ジャッジ日時 | 2025-05-29 15:22:54 |
合計ジャッジ時間 | 18,712 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 1 TLE * 2 -- * 22 |
コンパイルメッセージ
warning: trait `DisplayVec` is never used --> src/main.rs:19:7 | 19 | trait DisplayVec<T> { | ^^^^^^^^^^ | = note: `#[warn(dead_code)]` on by default
ソースコード
#[allow(unused_imports)] use proconio::{ fastout, input, marker::{Chars, Usize1}, }; #[allow(unused_imports)] use std::cmp::{max, min}; #[allow(unused_imports)] use std::collections::{HashMap, HashSet, VecDeque}; #[allow(unused_imports)] use std::fmt::Debug; #[allow(unused_imports)] use std::iter::{Flatten, FromIterator}; #[allow(unused_imports)] use std::ops::Index; #[allow(unused_imports)] use std::vec::IntoIter; trait DisplayVec<T> { fn print(&self, sep: &str); } impl<T> DisplayVec<T> for Vec<T> where T: ToString, { fn print(&self, sep: &str) { println!( "{}", self.iter() .map(std::string::ToString::to_string) .collect::<Vec<_>>() .join(sep) ) } } #[allow(dead_code)] fn print_chars(input_: &[char]) { println!("{}", &input_.iter().collect::<String>()) } #[allow(dead_code)] fn ctoi(c: &char) -> i32 { *c as i32 - 48 } #[allow(dead_code)] #[allow(non_snake_case)] fn YESNO(res: bool) { if res { println!("YES") } else { println!("NO") } } #[allow(dead_code)] #[allow(non_snake_case)] fn YesNo(res: bool) { if res { println!("Yes") } else { println!("No") } } #[allow(dead_code)] fn yesno(res: bool) { if res { println!("yes") } else { println!("no") } } #[allow(unused_macros)] macro_rules! input_arrays_with_len { ($e:expr, $t:ty) => { (0..$e) .map(|_| { input! { l: u32, nums: [$t; l] } nums }) .collect_vec() }; } fn mod_pow(num: i64, index_: i64, mod_: i64) -> i64 { if index_ == 0 { return 1; } if index_ % 2 == 0 { return mod_pow((num * num) % mod_, index_ / 2, mod_); } else { return num * mod_pow(num, index_ - 1, mod_) % mod_; } } fn combinations<T, F>( origin: &Vec<Vec<T>>, cur_idx: usize, cur_rest: usize, cur_array: &mut Vec<usize>, func: &F, ) -> Vec<bool> where F: Fn(&Vec<Vec<T>>, &Vec<usize>) -> bool, { let mut ans = vec![]; if cur_rest == 0 { ans.push(func(origin, &cur_array)); return ans; } if cur_idx == origin.len() { return ans; } let mut ans_2 = combinations(origin, cur_idx + 1, cur_rest, cur_array, func); if ans_2.len() > ans.len() { ans_2.extend(ans); ans = ans_2; } else { ans.extend(ans_2); } if cur_rest > 0 { cur_array.push(cur_idx); let mut ans_3 = combinations(origin, cur_idx + 1, cur_rest - 1, cur_array, func); if ans_3.len() > ans.len() { ans_3.extend(ans); ans = ans_3; } else { ans.extend(ans_3); } cur_array.pop(); } ans } fn main() { input! { n: usize, p: i64, q: i64, a: [i64; n], } let divisors = [10, 9, 7, 5]; let a_mod = a .iter() .map(|&a_elm| { divisors .iter() .map(move |&div_| mod_pow(div_, a_elm, p)) .collect::<Vec<i64>>() }) .collect::<Vec<_>>(); let mut cur = vec![]; let ctr = combinations(&a_mod, 0, 4, &mut cur, &|mods, array| { let v = array .iter() .enumerate() .map(|(idx, &elm)| mods[elm as usize][idx]) .fold(0, |sum, x| (sum + x) % p); v == q }); println!("{}", ctr.into_iter().filter(|&elm| elm).count()); }