Sắp xếp 1

Xem PDF



Tác giả:
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, Output, PHP, Pascal, Perl, Prolog, Pypy, Pypy 3, Python, Ruby, Rust, Scala, Scratch, Swift
Điểm: 1100 Thời gian: 1.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Trong một vương quốc toán học, nhà vua tổ chức một cuộc thi để tìm ra những phân số "quyền lực" nhất. Mỗi phân số thứ \(i\) được đại diện bởi một cặp số nguyên dương \((x_i, y_i)\), trong đó \(x_i\) là tử số và \(y_i\) là mẫu số.

Nhiệm vụ của bạn là giúp nhà vua sắp xếp danh sách \(n\) phân số này theo thứ tự giảm dần về giá trị. Trong trường hợp có hai hoặc nhiều phân số có giá trị bằng nhau, phân số nào có tổng tử số và mẫu số (\(x_i + y_i\)) lớn hơn sẽ được ưu tiên đứng trước.

Input

  • Dòng đầu tiên chứa số nguyên dương \(n\) (\(n \leq 10^5\)).
  • \(n\) dòng tiếp theo, mỗi dòng chứa hai số nguyên dương \(x_i\)\(y_i\) (\(x_i, y_i \leq 10^9\)) lần lượt là tử số và mẫu số của phân số thứ \(i\).

Output

  • In ra \(n\) dòng, mỗi dòng gồm hai số \(x_i\)\(y_i\) của các phân số sau khi đã được sắp xếp theo quy tắc trên.

Constraints

  • Subtask \(1\) (\(40\%\) số điểm): \(n \leq 10^3\)\(x_i, y_i \leq 10^3\).
  • Subtask \(2\) (\(60\%\) số điểm): Không có ràng buộc gì thêm.

Example

Test 1

Input
4
1 2
2 4
3 4
1 3
Output
3 4
2 4
1 2
1 3
Note
  • Các giá trị phân số lần lượt là: \(0.5, 0.5, 0.75, 0.33...\)
  • Sắp xếp giảm dần theo giá trị: \(0.75\) (3/4), tiếp theo là hai phân số cùng giá trị \(0.5\) (1/2 và 2/4), cuối cùng là \(0.33\) (1/3).
  • Xét hai phân số cùng giá trị \(0.5\):
    • Phân số \(1/2\) có tổng \(x+y = 1+2 = 3\).
    • Phân số \(2/4\) có tổng \(x+y = 2+4 = 6\).
    • \(6 > 3\) nên phân số \(2/4\) đứng trước \(1/2\).

Bình luận

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

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