QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 256 MB Total points: 100

#6266. Gute Bitfolgen

Statistics

Für zwei beliebige positive ganze Zahlen $a$ und $b$ wird die Funktion $\texttt{gen_string}(a,b)$ durch den folgenden Python-Code definiert:

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

Äquivalenter C++-Code:

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;
}

Beim Ende der Schleife ist $ia$ gleich $a$ und $ib$ gleich $b$. Diese Funktion gibt also eine Bitfolge der Länge $a+b$ mit genau $a$ Nullen und $b$ Einsen zurück. Zum Beispiel gilt $\texttt{gen_string}(4,10)=01110110111011$.

Eine Bitfolge $s$ heißt gut, wenn positive ganze Zahlen $x$ und $y$ existieren, sodass $s=\texttt{gen_string}(x,y)$. Gegeben sind zwei positive ganze Zahlen $A$ und $B$ ($1\le A,B\le 10^{18}$). Deine Aufgabe ist es, die Anzahl der guten Präfixe von $\texttt{gen_string}(A,B)$ zu berechnen. Zum Beispiel hat $\texttt{gen_string}(4,10)$ genau $6$ gute Präfixe:

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

Eingabe

Die erste Zeile enthält $T$ ($1\le T\le 10$), die Anzahl unabhängiger Testfälle.

Jede der nächsten $T$ Zeilen enthält zwei ganze Zahlen $A$ und $B$.

Ausgabe

Die Antwort für jeden Testfall in einer eigenen Zeile.

Beispiele

Eingabe 1

6
1 1
3 5
4 7
8 20
4 10
27 21

Ausgabe 1

1
5
7
10
6
13

Teilaufgaben

  • Eingabe 2: $A,B\le 100$
  • Eingabe 3: $A,B\le 1000$
  • Eingaben 4-7: $A,B\le 10^6$
  • Eingaben 8-13: Alle Antworten sind höchstens $10^5$.
  • Eingaben 14-21: Keine zusätzlichen Beschränkungen.

Aufgabenautor: Benjamin Qi

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.