Submission #3367037


Source Code Expand

/// Thank you tanakh!!!
/// https://qiita.com/tanakh/items/0ba42c7ca36cd29d0ac8
macro_rules! input {
    (source = $s:expr, $($r:tt)*) => {
        let mut iter = $s.split_whitespace();
        input_inner!{iter, $($r)*}
    };
    ($($r:tt)*) => {
        let mut s = {
            use std::io::Read;
            let mut s = String::new();
            std::io::stdin().read_to_string(&mut s).unwrap();
            s
        };
        let mut iter = s.split_whitespace();
        input_inner!{iter, $($r)*}
    };
}

macro_rules! input_inner {
    ($iter:expr) => {};
    ($iter:expr, ) => {};

    ($iter:expr, $var:ident : $t:tt $($r:tt)*) => {
        let $var = read_value!($iter, $t);
        input_inner!{$iter $($r)*}
    };
}

macro_rules! read_value {
    ($iter:expr, ( $($t:tt),* )) => {
        ( $(read_value!($iter, $t)),* )
    };

    ($iter:expr, [ $t:tt ; $len:expr ]) => {
        (0..$len).map(|_| read_value!($iter, $t)).collect::<Vec<_>>()
    };

    ($iter:expr, chars) => {
        read_value!($iter, String).chars().collect::<Vec<char>>()
    };

    ($iter:expr, usize1) => {
        read_value!($iter, usize) - 1
    };

    ($iter:expr, $t:ty) => {
        $iter.next().unwrap().parse::<$t>().expect("Parse error")
    };
}

use std::cmp;

fn main() {
    input!(n: usize, m: usize, x: [usize; n]);

    let max: usize = *x.iter().max().unwrap();
    let mut remainder_count = vec![vec![]; m];
    for &x in x.iter() {
        let r = x % m;
        remainder_count[r].push(x);
    }

    let mut ans = 0;
    for i in 0..m {
        if i == 0 || i * 2 == m {
            ans += remainder_count[0].len() / 2;
        } else if m - i < i {
            break;
        } else {
            let j = m - i;

            let len_i = remainder_count[i].len();
            let len_j = remainder_count[j].len();
            ans += cmp::min(len_i, len_j);

            let t = if len_i > len_j { i } else { i };
            remainder_count[t].sort();

            let mut pair = 0;
            let mut i = 1;
            while i < remainder_count[t].len() {
                if remainder_count[t][i - 1] == remainder_count[t][i] {
                    pair += 1;
                    i += 2;
                } else {
                    i += 1;
                }
            }

            let remain = cmp::max(len_i, len_j) - cmp::min(len_i, len_j);
            ans += cmp::min(remain / 2, pair);
        }
    }

    println!("{}", ans);
}

Submission Info

Submission Time
Task D - Pair Cards
User kenkoooo
Language Rust (1.15.1)
Score 0
Code Size 2557 Byte
Status WA
Exec Time 16 ms
Memory 12540 KB

Compile Error

warning: unused variable: `max`, #[warn(unused_variables)] on by default
  --> ./Main.rs:57:9
   |
57 |     let max: usize = *x.iter().max().unwrap();
   |         ^^^

warning: variable does not need to be mutable, #[warn(unused_mut)] on by default
  --> ./Main.rs:9:13
   |
9  |         let mut s = {
   |             ^^^^^
...
55 |     input!(n: usize, m: usize, x: [usize; n]);
   |     ------------------------------------------ in this macro invocation

Judge Result

Set Name sample all
Score / Max Score 0 / 0 0 / 700
Status
AC × 2
AC × 22
WA × 12
Set Name Test Cases
sample sample-01.txt, sample-02.txt
all sample-01.txt, sample-02.txt, 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 01-12.txt, 01-13.txt, 01-14.txt, 01-15.txt, 01-16.txt, 01-17.txt, 01-18.txt, 01-19.txt, 01-20.txt, 01-21.txt, 01-22.txt, 01-23.txt, 01-24.txt, 01-25.txt, 01-26.txt, 01-27.txt, 01-28.txt, 01-29.txt, 01-30.txt, sample-01.txt, sample-02.txt
Case Name Status Exec Time Memory
01-01.txt AC 2 ms 4352 KB
01-02.txt AC 9 ms 8444 KB
01-03.txt WA 9 ms 8444 KB
01-04.txt AC 11 ms 8444 KB
01-05.txt WA 11 ms 8444 KB
01-06.txt AC 12 ms 8444 KB
01-07.txt WA 11 ms 6396 KB
01-08.txt AC 11 ms 6396 KB
01-09.txt WA 11 ms 6396 KB
01-10.txt WA 13 ms 8444 KB
01-11.txt WA 16 ms 12540 KB
01-12.txt AC 9 ms 8444 KB
01-13.txt AC 11 ms 10492 KB
01-14.txt AC 9 ms 8444 KB
01-15.txt AC 11 ms 8444 KB
01-16.txt AC 11 ms 8444 KB
01-17.txt AC 11 ms 6396 KB
01-18.txt AC 12 ms 8444 KB
01-19.txt AC 11 ms 6396 KB
01-20.txt AC 16 ms 12540 KB
01-21.txt WA 9 ms 8444 KB
01-22.txt AC 11 ms 6396 KB
01-23.txt WA 11 ms 8444 KB
01-24.txt WA 10 ms 6396 KB
01-25.txt WA 11 ms 8444 KB
01-26.txt WA 12 ms 10492 KB
01-27.txt AC 10 ms 10492 KB
01-28.txt WA 4 ms 8444 KB
01-29.txt AC 2 ms 4352 KB
01-30.txt AC 4 ms 8444 KB
sample-01.txt AC 2 ms 4352 KB
sample-02.txt AC 2 ms 4352 KB