QOJ.ac

QOJ

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

#6266. Cadenas de bits buenas

Statistics

Para cualesquiera dos enteros positivos $a$ y $b$, definimos la función $\texttt{gen_string}(a,b)$ mediante el siguiente código 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

Código 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;
}

Cuando termina el bucle, $ia$ será igual a $a$ e $ib$ será igual a $b$, por lo que esta función devuelve una cadena de bits de longitud $a+b$ con exactamente $a$ ceros y $b$ unos. Por ejemplo, $\texttt{gen_string}(4,10)=01110110111011$.

Decimos que una cadena de bits $s$ es $\textbf{buena}$ si existen enteros positivos $x$ e $y$ tales que $s=\texttt{gen_string}(x,y)$. Dados dos enteros positivos $A$ y $B$ ($1\le A,B\le 10^{18}$), debes calcular el número de prefijos buenos de $\texttt{gen_string}(A,B)$. Por ejemplo, hay $6$ prefijos buenos de $\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

Entrada

La primera línea contiene $T$ ($1\le T\le 10$), el número de casos de prueba independientes.

Cada una de las siguientes $T$ líneas contiene dos enteros $A$ y $B$.

Salida

La respuesta para cada caso de prueba en una línea nueva.

Ejemplos

Entrada 1

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

Salida 1

1
5
7
10
6
13

Subtareas

  • Entrada 2: $A,B\le 100$
  • Entrada 3: $A,B\le 1000$
  • Entradas 4-7: $A,B\le 10^6$
  • Entradas 8-13: Todas las respuestas son como máximo $10^5$.
  • Entradas 14-21: Sin restricciones adicionales.

Autor 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.