pesquisa

URI PROBLEMA 1084 - Apagando e Ganhando SOLUÇÃO EM C++

URI Online Judge | 1084

Apagando e Ganhando

Por Fábio Dias Moreira  Brasil
Timelimit: 1
Juliano é fã do programa de auditório Apagando e Ganhando, um programa no qual os participantes são selecionados através de um sorteio e recebem prêmios em dinheiro por participarem.
No programa, o apresentador escreve um número de dígitos em uma lousa. O participante então deve apagar exatamente dígitos do número que está na lousa; o número formado pelos dígitos que restaram é então o prêmio do participante.
Juliano finalmente foi selecionado para participar do programa, e pediu que você escrevesse um programa que, dados o número que o apresentador escreveu na lousa, e quantos dígitos Juliano tem que apagar, determina o valor do maior prêmio que Juliano pode ganhar.

Entrada

A entrada contém vários casos de teste. A primeira linha de cada caso de teste contém dois inteiros D (1 ≤ ≤ 105), indicando a quantidade de dígitos do número que o apresentador escreveu na lousa e quantos dígitos devem ser apagados. A linha seguinte contém o número escrito pelo apresentador, que não contém zeros à esquerda.
O final da entrada é indicado por uma linha que contém apenas dois zeros, separados por um espaço em branco.

Saída

Para cada caso de teste da entrada seu programa deve imprimir uma única linha na saída, contendo o maior prêmio que Juliano pode ganhar.


#include <cstdio>
#include <stack>
using namespace std;
int main(){
int n,m,apagados;
while(scanf("%d %d",&n,&m) && (n||m)){
getchar();
apagados = 0;
stack<char> pilha,resposta;
for(int i = 0;i<n;i++){
char davez;
scanf("%c",&davez);
while (!pilha.empty() && apagados < m && davez > pilha.top()){
pilha.pop();
apagados++;
}
if (pilha.size()< n - m) pilha.push(davez);
}
while(!pilha.empty()) {
resposta.push(pilha.top());
pilha.pop();
}
while(!resposta.empty()){
printf("%c",resposta.top());
resposta.pop();
}
printf("\n");
}
return 0;
}

Postar um comentário

0 Comentários