Solução escrita por João Pedro Castro
Sabemos que pode ser escrito como , sendo o algarismo na casa das unidades de (basicamente estamos adicionando um ao fim de e adicionando um algarismo , o que troca o por esse algarismo). Portanto:
O problema pede que seja um inteiro, logo é 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, . Como é um algarismo , logo se não existe solução (podemos imprimir -1). Agora que sabemos o valor de e que existe uma solução, é só seguir a fórmula que achamos anteriormente para . E como a fórmula de só depende de e (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 é , podemos afirmar que a complexidade final é de , o que nos garante um AC com tranquilidade. Segue o código abaixo para melhor compreensão.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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"; | |
} | |
} | |
} |