Skip to content

Instantly share code, notes, and snippets.

@veigavitor
Created January 16, 2023 22:57
Show Gist options
  • Save veigavitor/fc404daa38badfe044ab64c2f76df274 to your computer and use it in GitHub Desktop.
Save veigavitor/fc404daa38badfe044ab64c2f76df274 to your computer and use it in GitHub Desktop.
#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