結果
問題 | No.616 へんなソート |
ユーザー |
|
提出日時 | 2018-01-03 23:54:00 |
言語 | Rust (1.83.0 + proconio) |
結果 |
AC
|
実行時間 | 28 ms / 2,000 ms |
コード長 | 2,822 bytes |
コンパイル時間 | 18,229 ms |
コンパイル使用メモリ | 392,732 KB |
実行使用メモリ | 6,824 KB |
最終ジャッジ日時 | 2024-12-23 02:33:09 |
合計ジャッジ時間 | 16,296 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
#[allow(unused_imports)]use std::cmp::{max, min, Ordering};#[allow(unused_imports)]use std::collections::{BTreeMap, BTreeSet, BinaryHeap, HashMap, HashSet, VecDeque};#[allow(unused_imports)]use std::iter::FromIterator;#[allow(unused_imports)]use std::io::stdin;mod util {use std::io::stdin;use std::str::FromStr;use std::fmt::Debug;#[allow(dead_code)]pub fn line() -> String {let mut line: String = String::new();stdin().read_line(&mut line).unwrap();line.trim().to_string()}#[allow(dead_code)]pub fn gets<T: FromStr>() -> Vec<T>where<T as FromStr>::Err: Debug,{let mut line: String = String::new();stdin().read_line(&mut line).unwrap();line.split_whitespace().map(|t| t.parse().unwrap()).collect()}}#[allow(unused_macros)]macro_rules! get {($t:ty) => {{let mut line: String = String::new();stdin().read_line(&mut line).unwrap();line.trim().parse::<$t>().unwrap()}};($($t:ty),*) => {{let mut line: String = String::new();stdin().read_line(&mut line).unwrap();let mut iter = line.split_whitespace();($(iter.next().unwrap().parse::<$t>().unwrap(),)*)}};($t:ty; $n:expr) => {(0..$n).map(|_|get!($t)).collect::<Vec<_>>()};($($t:ty),*; $n:expr) => {(0..$n).map(|_|get!($($t),*)).collect::<Vec<_>>()};($t:ty ;;) => {{let mut line: String = String::new();stdin().read_line(&mut line).unwrap();line.split_whitespace().map(|t| t.parse::<$t>().unwrap()).collect::<Vec<_>>()}};}#[allow(unused_macros)]macro_rules! debug {($($a:expr),*) => {println!(concat!($(stringify!($a), " = {:?}, "),*), $($a),*);}}const M: u64 = 1000000007;fn main() {let (n, k) = get!(usize, usize);let mut v = vec![1];for i in 2..n + 1 {let mut next = Vec::new();let mut t = 0;let mut slide = VecDeque::new();let m = (i * (i - 1)) / 2 + 1;for j in 0..(m + 1) / 2 {t = (t + v[j]) % M;slide.push_back(v[j]);if slide.len() > i {t = (t + M - slide.pop_front().unwrap()) % M;}next.push(t);}let l = next.len() - m % 2;for j in 0..m / 2 {let x = next[l - 1 - j];next.push(x);}v = next;}println!("{}", v[..k + 1].iter().fold(0, |a, &b| (a + b) % M));}