paranid5

CF_ok

Nov 15th, 2020
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rust 2.26 KB | None | 0 0
  1. use std::fmt::Debug;
  2. use std::io;
  3. use std::num::ParseIntError;
  4. use std::str::FromStr;
  5.  
  6. #[inline]
  7. fn input<T: FromStr<Err = ParseIntError> + Debug>() -> T {
  8.     let mut input = String::new();
  9.     io::stdin().read_line(&mut input).unwrap();
  10.     input.trim().parse().unwrap()
  11. }
  12.  
  13. #[inline]
  14. fn input_vec<T: FromStr<Err = ParseIntError> + Debug>() -> Vec<T> {
  15.     let mut input = String::new();
  16.     io::stdin().read_line(&mut input).unwrap();
  17.     input
  18.         .split_ascii_whitespace()
  19.         .map(|x| x.parse::<T>().unwrap())
  20.         .collect()
  21. }
  22.  
  23. #[inline]
  24. fn input_pair<T: FromStr<Err = ParseIntError> + Debug>() -> (T, T) {
  25.     let mut input = String::new();
  26.     io::stdin().read_line(&mut input).unwrap();
  27.  
  28.     let mut input = input.split_ascii_whitespace();
  29.     (
  30.         input.next().unwrap().parse().unwrap(),
  31.         input.next().unwrap().parse().unwrap(),
  32.     )
  33. }
  34.  
  35. fn main() {
  36.     let t = input::<i32>();
  37.  
  38.     for _ in 0..t {
  39.         let (n, m) = input_pair::<usize>();
  40.         let mut vec = vec![vec![0; m]; n];
  41.  
  42.         for i in &mut vec {
  43.             *i = input_vec::<i32>();
  44.         }
  45.  
  46.         let mut map = Vec::<(i32, usize, usize)>::new();
  47.  
  48.         for i in 0..n {
  49.             for q in 0..m {
  50.                 unsafe {
  51.                     if *vec.get_unchecked(i).get_unchecked(q) <= 0 {
  52.                         map.push((*vec.get_unchecked(i).get_unchecked(q), i, q));
  53.                     }
  54.                 }
  55.             }
  56.         }
  57.  
  58.         map.sort_by(|x, y| (x.0).partial_cmp(&y.0).unwrap());
  59.  
  60.         let mut sum = 0_i128;
  61.  
  62.         for i in 0..n {
  63.             for q in 0..m {
  64.                 unsafe {
  65.                     sum += (*vec.get_unchecked(i).get_unchecked(q)).abs() as i128;
  66.                 }
  67.             }
  68.         }
  69.  
  70.         if map.len() % 2 != 0 {
  71.             let mut min = 101;
  72.  
  73.             for i in 0..n {
  74.                 for q in 0..m {
  75.                     unsafe {
  76.                         if min > (*vec.get_unchecked(i).get_unchecked(q)).abs() {
  77.                             min = (*vec.get_unchecked(i).get_unchecked(q)).abs();
  78.                         }
  79.                     }
  80.                 }
  81.             }
  82.  
  83.             sum -= min as i128 * 2;
  84.         }
  85.  
  86.         println!("{}", sum);
  87.     }
  88. }
  89.  
Add Comment
Please, Sign In to add comment