USACO 2023 US Open Contest, Platinum, Good Bitstrings

Xem PDF

Điểm: 1000 (p) Thời gian: 2.0s Bộ nhớ: 256M Input: bàn phím Output: màn hình

Với \(2\) số nguyên dương \(a\)\(b\) bất kì. Ta định nghĩa hàm gen_string(a, b) bởi đoạn code Python sau:

Python
def gen_string(a: int, b: int):
    res = ""
    ia, ib = 0, 0
    while ia + ib < a + b:
        if ia * b <= ib * a:
            res += '0'
            ia += 1
        else:
            res += '1'
            ib += 1
    return res

Tương đương với đoạn code C++ sau:

C++
string gen_string(int64_t a, int64_t b) {
    string res;
    int ia = 0, ib = 0;
    while (ia + ib < a + b) {
        if ((__int128)ia * b <= (__int128)ib * a) {
            res += '0';
            ia++;
        } else {
            res += '1';
            ib++;
        }
    }
    return res;
}

\(ia\) sẽ bằng \(a\)\(ib\) sẽ bằng \(b\) khi vòng lặp kết thúc, như vậy hàm gen_string(a, b) trên sẽ sinh ra một xâu nhị phân độ dài \(a + b\) chứa đúng \(a\) bit \(0\)\(b\) bit \(1\). Ví dụ, gen_string(4,10)=01110110111011.

Một xâu nhị phân \(s\) được gọi là "tốt" nếu như tồn tại \(2\) số nguyên dương \(x\)\(y\) sao cho \(s =\) gen_string(x, y). Bạn được cho \(2\) số \(A\)\(B\) \((1 \le A, B \le 10^{18})\), bạn cần tính toán số xâu tiền tố "tốt" của xâu gen_string(A, B). Ví dụ, có \(6\) xâu tiền tố "tốt" của xâu gen_string(4, 10):

X Y gen_string(X, Y)
x = 1 y = 1 gen_string(x, y) = 01
x = 1 y = 2 gen_string(x, y) = 011
x = 1 y = 3 gen_string(x, y) = 0111
x = 2 y = 5 gen_string(x, y) = 0111011
x = 3 y = 7 gen_string(x, y) = 0111011011
x = 4 y = 10 gen_string(x, y) = 01110110111011

Input

  • Dòng đầu tiên chứa số \(T\) \((T \le 10)\), chỉ số lượng test.
  • \(T\) dòng tiếp theo, mỗi dòng chứa \(2\) số \(A\)\(B\).

Output

  • Gồm \(T\) dòng, mỗi dòng là đáp cho mỗi test.

Scoring

  • Subtask \(1\): \(A, B \le 100\).
  • Subtask \(2\): \(A, B \le 1000\).
  • Subtask \(3\): \(A, B \le 10^6\).
  • Subtask \(4\): Không có quá \(10^5\) xâu tiền tố tốt trong mỗi test.
  • Subtask \(5\): Không có thêm ràng buộc.

Test 1

Input
6
1 1
3 5
4 7
8 20
4 10
27 21
Output
1
5
7
10
6
13

Bình luận

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