Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. use std::io;
  2. use std::io::Read;
  3.  
  4. macro_rules! get {
  5. // 1行 1数値を取得する。
  6. ($t: ty) => {{
  7. let mut line: String = String::new();
  8. std::io::stdin().read_line(&mut line).unwrap();
  9. line.trim().parse::<$t>().unwrap()
  10. }};
  11. // ↑ を$n回やってVectorを返す。
  12. ($t:ty; $n:expr) => {{
  13. (0..$n).map(|_| get!($t) ).collect::<Vec<_>>()
  14. }};
  15.  
  16.  
  17. // 一行に含まれる複数値をタプルにして返す ex. in 1 2 3 : get!(usize, usize, usize) -> (1, 2, 3)
  18. ($ ($t:ty), *) => {{
  19. let mut line: String = String::new();
  20. std::io::stdin().read_line(&mut line).unwrap();
  21. let mut iter = lien.split_whitespace();
  22. (
  23. $( iter.next().unwarp().parse::<$t>().unwrap(), )*
  24. )
  25. }};
  26. // ↑ を $n回やって、Vec<(ty, ty, ty, ...)> を返す
  27. ($ ($t:ty), *; $n:expr) => {
  28. (0..$n).map(|_|
  29. get!($($t),*) // , カンマも繰り返される
  30. ).collect::<Vec<_>>()
  31. };
  32.  
  33. // 1行n数値を、全部同じ型でパースしてVecで返す。
  34. ($t:ty ;;) => {{
  35. let mut line: String = String::new();
  36. std::io::stdin().read_line(&mut line).unwrap();
  37. line.split_whitespace().map(|text| text.parse::<$t>().unwrap()).collect::<Vec<_>>()
  38. }};
  39.  
  40. // ↑を複数回繰り返して、2次元vectorで返す。vec[row][col]
  41. ($t:ty ;; $n:expr) => {
  42. (0..$n).map(|_| get!($t ;;)).collect::<Vec<_>>()
  43. };
  44.  
  45. }
  46.  
  47. fn main() {
  48. // バッファ用意
  49. let mut buf = String::new();
  50. io::stdin().read_to_string(&mut buf).unwrap();
  51.  
  52. let mut iter = buf.split_whitespace();
  53. let n = get!(usize);
  54. let q: usize = iter.next().unwrap().parse().unwrap(); // データ列の数
  55.  
  56. // 要素数 0 ~ q-1 のタプルVecを作って、vecterに代入する
  57. let lrt: Vec<(usize, usize, u64)> = (0..q)
  58. .map(|_| {
  59. (
  60. iter.next().unwrap().parse().unwrap(),
  61. iter.next().unwrap().parse().unwrap(),
  62. iter.next().unwrap().parse().unwrap(),
  63. )
  64. })
  65. .collect();
  66. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement