Solução Informática - Iniciante - Semana 38

Solução escrita por João Pedro Castro

Sabemos que X pode ser escrito como 10 \cdot Y + Z, sendo Z o algarismo na casa das unidades de X (basicamente estamos adicionando um 0 ao fim de Y e adicionando um algarismo Z, o que troca o 0 por esse algarismo). Portanto:

10 \cdot Y + Z + Y = N  \implies 11 \cdot Y + Z = N  \implies 11 \cdot Y = N - Z \implies Y = \frac{N - Z}{11}

O problema pede que Y seja um inteiro, logo N - Z é necessariamente divisível por 11. Felizmente existe uma função matemática que determina o quanto você precisa subtrair de um número positivo para ele ser divisível por outro, a função módulo. Portanto, Z = (N \bmod 11). Como Z é um algarismo 0 \leq Z \leq 9, logo se Z = 10 não existe solução (podemos imprimir -1). Agora que sabemos o valor de Z e que existe uma solução, é só seguir a fórmula que achamos anteriormente para Y. E como a fórmula de X só depende de Y e Z (2 valores que já calculamos), também é só seguir a definição anterior para fechar a questão.

Como a complexidade para cada caso de teste é O(1), podemos afirmar que a complexidade final é de O(T), o que nos garante um AC com tranquilidade. Segue o código abaixo para melhor compreensão.


#include <bits/stdc++.h>
using namespace std;
int main() {
int t;
cin >> t;
while(t--) {
int n;
cin >> n;
int z = n % 11;
if (z > 9) {
cout << -1 << "\n";
} else {
int y = n/11; // podemos fazer isso pois o C++ arredonda o valor pra baixo automaticamente
int x = 10*y+z;
cout << x << " " << y << "\n";
}
}
}