Tỉ lệ thành công

Đề bài

Mô tả

Bạn đã thực hiện y lần nộp bài, trong đó có x lần thành công. Như vậy tỉ lệ thành công hiện tại của bạn là x/y.

Phân số yêu thích của bạn trong đoạn [0;1]p/q. Bạn muốn biết: cần thực hiện thêm ít nhất bao nhiêu lần nộp bài nữa để tỉ lệ thành công đúng bằng p/q?

Mỗi lần nộp thêm, bạn có thể tự chọn nó là thành công hay không thành công. Sau khi nộp thêm, gọi tổng số lần nộp là y và số lần thành công là x; bạn cần x/y=p/q. Hãy tìm giá trị nhỏ nhất của yy, hoặc in 1 nếu không thể đạt được.

Dữ liệu vào

  • Dòng đầu chứa một số nguyên t là số lượng bộ dữ liệu.
  • t dòng tiếp theo, mỗi dòng chứa bốn số nguyên x, y, p, q.

Đảm bảo p/q là phân số tối giản.

Dữ liệu ra

Với mỗi bộ dữ liệu, in ra một số nguyên là số lần nộp thêm ít nhất cần thực hiện để tỉ lệ thành công bằng p/q, hoặc 1 nếu không thể.

Ràng buộc

  • 1t1000
  • 0xy109
  • 0pq109
  • y>0, q>0

Ví dụ

Input Output Giải thích
4
3 10 1 2
7 14 3 8
20 70 2 7
5 6 1 1
4
10
0
-1
Bộ 1: nộp thêm 4 lần thành công, được 7/14 = 1/2. Bộ 2: nộp thêm 2 thành công và 8 không thành công, được 9/24 = 3/8. Bộ 3: tỉ lệ 20/70 = 2/7 đã đúng, không cần nộp thêm. Bộ 4: chỉ cần 1 lần không thành công là hỏng, không thể đạt 1/1.
8
0 1 0 1
0 2 1 2
0 3 1 1
1 2 0 1
1 2 1 1
2 2 0 1
3 3 1 2
4 4 1 1
0
2
-1
-1
-1
-1
3
0
Khi p=0 mọi lần nộp phải không thành công, nên chỉ đạt được nếu x=0. Khi p=q mọi lần nộp phải thành công, nên chỉ đạt được nếu x=y.

Bình luận

Không có bình luận tại thời điểm này.

gnatmake 12.2.0 a68g 3.1.2 nasm 2.16.1 as_x64 2.46 awk 1.3.4 gcc 16.1.0 csc 6.12.0.200 g++ 16.1.0 g++-themis 16.1.0 g++17 16.1.0 g++20 16.1.0 g++23 16.1.0 clang++ 22.1.6 dmd 2.112.0 dart 3.12.1 gforth 0.7.3 gfortran 12.2.0 go 1.26.3 groovyc 5.0.6 javac 25.0.3 node 26.2.0 kotlinc 2.3.21 sbcl 2.2.9 lua 5.4.8 nim 2.2.10 fpc 3.2.2 fpc-themis 3.2.2 perl 5.36.0 php 8.5.6 pike 8.0 pypy3 7.3.23 python3 3.14.5 racket 8.7 ruby 4.0.5 rustc 1.96.0 csc 5.3.0 ctoj-scratch 0.0.1 sed 4.9 tclsh 8.6 bun 1.3.14 deno 2.8.1 v 0.5.1 zig 0.16.0