QOJ.ac

QOJ

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

#6266. Stringhe di bit buone

Statistics

Per due interi positivi qualsiasi $a$ e $b$, definiamo la funzione $\texttt{gen_string}(a,b)$ tramite il seguente codice 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

Codice C++ equivalente:

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

Quando il ciclo termina, $ia$ è uguale ad $a$ e $ib$ è uguale a $b$, quindi questa funzione restituisce una stringa di bit di lunghezza $a+b$ con esattamente $a$ zeri e $b$ uni. Per esempio, $\texttt{gen_string}(4,10)=01110110111011$.

Una stringa di bit $s$ si dice $\textbf{buona}$ se esistono interi positivi $x$ e $y$ tali che $s=\texttt{gen_string}(x,y)$. Dati due interi positivi $A$ e $B$ ($1\le A,B\le 10^{18}$), il tuo compito è calcolare il numero di prefissi buoni di $\texttt{gen_string}(A,B)$. Per esempio, ci sono $6$ prefissi buoni di $\texttt{gen_string}(4,10)$:

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

La prima riga contiene $T$ ($1\le T\le 10$), il numero di casi di test indipendenti.

Ognuna delle successive $T$ righe contiene due interi $A$ e $B$.

Output

La risposta a ogni caso di test su una nuova riga.

Esempi

Input 1

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

Output 1

1
5
7
10
6
13

Sottoproblemi

  • Input 2: $A,B\le 100$
  • Input 3: $A,B\le 1000$
  • Input 4-7: $A,B\le 10^6$
  • Input 8-13: tutte le risposte sono al massimo $10^5$.
  • Input 14-21: nessun vincolo aggiuntivo.

Autore del problema: 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.