-
-
Save veigavitor/fc404daa38badfe044ab64c2f76df274 to your computer and use it in GitHub Desktop.
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; | |
#define sz(x) (int)x.size() | |
string prox_busca(string s) { | |
// retorna o valor de s + 1, em forma de string | |
bool ok = false; | |
for(int i = sz(s)-1; i >= 0; i--) { | |
// se o dígito for 9, transformamos em 0 e vamos pro próximo dígito | |
// caso contrário, aumentamos o valor do dígito em 1 e finalizamos a função | |
if(s[i] == '9') { | |
s[i] = '0'; | |
} else { | |
s[i]++; | |
ok = true; | |
break; | |
} | |
} | |
// caso o número seja formado apenas por noves, temos que adicionar 1 antes dos zeros | |
// exemplo: 9999 => 0000 => 10000 | |
if(ok == false) s = "1" + s; | |
return s; | |
} | |
int main() { | |
ios::sync_with_stdio(false); | |
cin.tie(nullptr); | |
// lemos a entrada | |
int n; | |
cin >> n; | |
string digitos; | |
for(int i = 0; i < n; i++) { | |
char c; | |
cin >> c; | |
digitos += c; | |
} | |
// tentaremos achar uma sequência válida com cada um dos possíveis números iniciais | |
// a primeira sequência válida que acharmos será a resposta, pois queremos o menor número inicial | |
// é garantido que sempre acharemos uma resposta, pois pelo menos o último número que checarmos, de tamanho 'n' será uma sequência válida | |
for(int tamanho = 1; tamanho <= n; tamanho++) { | |
// ini será o primeiro número da sequência atual | |
// busca será o próximo número que teremos que achar no nosso vetor | |
string ini, busca; | |
for(int i = 0; i < tamanho; i++) { | |
ini += digitos[i]; | |
} | |
busca = ini; | |
// atual será o número que conseguimos formar com a nossa lista | |
string atual; | |
for(int i = 0; i < n; i++) { | |
atual += digitos[i]; | |
// caso o atual seja igual número que estamos buscando, resetamos o atual e começamos uma nova busca | |
if(atual == busca) { | |
atual = ""; | |
// a função "prox_busca" retorna em uma string, o valor numérico da string que enviamos mais um | |
busca = prox_busca(busca); | |
} | |
} | |
// se achamos uma sequência válida, retornamos o ini e finalizamos o programa | |
if(atual == "") { | |
cout << ini << endl; | |
return 0; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment