BOI 2016 - Spiral

Xem PDF



Dạng bài
Ngôn ngữ cho phép
Assembly, Awk, C, C#, C++, Clang, Cobol, D, Groovy, Haskell, JS, Java, Kotlin, Lua, Node JS, OCaml, ObjectiveC, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 2300 (p) Thời gian: 10.0s Bộ nhớ: 512M Input: bàn phím Output: màn hình

Một bảng ô vuông kích thước \((2n+1) \times (2n+1)\) được xây dựng như sau. Số \(1\) được đặt ở ô chính giữa, số \(2\) được đặt ở ô ngay bên phải nó, và các số tiếp theo được đặt dọc theo một đường xoắn ốc ngược chiều kim đồng hồ.

Nhiệm vụ của bạn là trả lời \(q\) truy vấn. Mỗi truy vấn yêu cầu tính tổng các số trong một vùng hình chữ nhật của bảng, lấy phần dư khi chia cho \(10^9+7\).

Dữ liệu vào

Dòng đầu tiên chứa hai số nguyên \(n\)\(q\): tham số xác định kích thước bảng và số truy vấn.

\(q\) dòng tiếp theo, mỗi dòng chứa bốn số nguyên \(x_1\), \(y_1\), \(x_2\)\(y_2\), với \(-n \le x_1 \le x_2 \le n\)\(-n \le y_1 \le y_2 \le n\). Bạn cần tính tổng các số trong vùng hình chữ nhật có hai góc đối diện là \((x_1,y_1)\)\((x_2,y_2)\).

Dữ liệu ra

Với mỗi truy vấn theo thứ tự trong dữ liệu vào, in ra một dòng chứa kết quả, lấy phần dư khi chia cho \(10^9+7\).

Ràng buộc

Trong mọi phân nhóm, \(1 \le q \le 100\).

Phân nhóm

  1. Nhóm 1 (12 điểm): \(1 \le n \le 1000\).
  2. Nhóm 2 (15 điểm): \(1 \le n \le 10^9\); mọi truy vấn đều có \(x_1=x_2\)\(y_1=y_2\).
  3. Nhóm 3 (17 điểm): \(1 \le n \le 10^5\).
  4. Nhóm 4 (31 điểm): \(1 \le n \le 10^9\); mọi truy vấn đều có \(x_1=y_1=1\).
  5. Nhóm 5 (25 điểm): \(1 \le n \le 10^9\).

Ví dụ

Ví dụ 1

Input
2 3
0 -2 1 1
-1 0 1 0
1 2 1 2
Output
74
9
14
Giải thích

Trong bảng dưới đây, \(n=2\) và tổng các số trong vùng tô xám là \(74\).

Nguồn

Baltic Olympiad in Informatics 2016, ngày thi thứ nhất, bài C.

Bình luận

Mới nhất
Tải bình luận...

Không có bình luận nào.

Kỳ thi: