Jump to content

Recommended Posts

Posted

Não penses que é fácil resolver correctamente um problema.

Os pontos são atribuídos conforme o número de testes que o problema passou correctamente.

Isto significa, dar a resposta correcta, dentro do tempo limite (1 segundo) e da memória limite (32MB).

A divisão é (normalmente) feita através do tempo. Existem várias maneiras de resolver um problema, umas mais rápidas (eficientes) do que outras. Umas irão passar os testes todos, outras irão ter Time Limit Exceeded no últimos casos de teste.

  • Replies 126
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted

Eu inscrevi-me nas ONI, ainda ñ tive a treinar, mas ja dei uma olhada. O género de exercícios é igual aos que fiz no CIP (outro concurso de programação) na univ de coimbra e a minha equipa ganhou. O sistema Mooshak é exatamente o mesmo e os problemas estão em português (no outro estavam em ingles), por isso já tou ambientado. Vai ser fixe concorrer com o pessoal desta comunidade, vai ser uma boa experiencia.

Já vi li aqui que algum pessoal tem problemas quanto aos inputs. Aconcelho a que usem Linux e que façam o input por um ficheiro txt, foi assim que fiz em coimbra. Boa sorte a todos.

Posted

Se te der a solução perde a piada toda, mas vou dar uma dica..

Repara que o maior placar vai obrigatoriamente tocar o topo de pelo menos um dos prédios

Já agora, Pedro, quando/se passares por cá.. Qual é a solução óptima para este problema? (a minha apesar de ter 100 pontos é O(n²), pelo que devia falhar num caso de testes "mau", não aleatório)

Programação dinâmica tendo por base a altura dos prédios e o número deles? O(n*h)? Acho que passava em tempo mas que dá MLE..

PS: tsenart qual é o teu nome?

Posted

É pá.... Alguém me explica como é que eu resolvo este problema???

Tens que ver qual é a sequência mais longa de prédios altos. O maior produto de (nr de prédios) * (altura do mais baixo), vai ser a sequência que prédios onde vai estar a ocupar mais espaço.

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Posted

Se te der a solução perde a piada toda, mas vou dar uma dica..

Repara que o maior placar vai obrigatoriamente tocar o topo de pelo menos um dos prédios

Já agora, Pedro, quando/se passares por cá.. Qual é a solução óptima para este problema? (a minha apesar de ter 100 pontos é O(n²), pelo que devia falhar num caso de testes "mau", não aleatório)

Programação dinâmica tendo por base a altura dos prédios e o número deles? O(n*h)? Acho que passava em tempo mas que dá MLE..

PS: tsenart qual é o teu nome?

http://www.portugal-a-programar.pt/index.php?showtopic=6553

Posted

Ainda não te vejo como inscrito nas ONI, vais fazê-lo?

Lol... Não. Estava só a resolver problemas de programação.

Provavelmente para o ano lá estarei. Agora ainda não tenho nivel.

Posted

Já agora, Pedro, quando/se passares por cá.. Qual é a solução óptima para este problema? (a minha apesar de ter 100 pontos é O(n²), pelo que devia falhar num caso de testes "mau", não aleatório)

Programação dinâmica tendo por base a altura dos prédios e o número deles? O(n*h)? Acho que passava em tempo mas que dá MLE..

recorrendo a uma stack podes resolver o problema em tempo O(n) (acho eu, já implementei a solução, mas ainda não analisei a complexidade a fundo, mas penso que é linear).

Posted

É possível resolver em O(n*h) com O(h) de espaço, encontrei uma solução para isso.

Com a stack.. Não estou a ver como funciona em O(n). Provavelmente não estou a ver o funcionamento.

Posted

É possível resolver em O(n*h) com O(h) de espaço, encontrei uma solução para isso.

Com a stack.. Não estou a ver como funciona em O(n). Provavelmente não estou a ver o funcionamento.

colocas a altura de um prédio e a sua posição numa stack, quando aparecer um prédio mais pequeno do que o prédio que está no topo da stack vais retirando o(s) elemento(s) da stack (maiores do que o prédio em causa); como também guardaste a sua posição podes calcular as áreas máximas possíveis para os prédio que estás a retirar da stack. é claro que há pormenores a ter em conta para garantir que funciona em todos os casos, nomeadamente na última iteração (e se calhar alguns que eu ainda não coniderei, mas em meia dúzia de testes que fiz estava a funcionar).

EDIT: em termos de espaço este algoritmo será O(n).

Posted

E isso dá a solução correcta para uma rua em que os prédios só crescem? (por exemplo)

Nunca vais retirar nenhum prédio (são sempre maiores do que o anterior), mas não estou a ver como consegues calcular a área neste caso.

Se funciona, continuo sem perceber.

Posted

E isso dá a solução correcta para uma rua em que os prédios só crescem? (por exemplo)

Nunca vais retirar nenhum prédio (são sempre maiores do que o anterior), mas não estou a ver como consegues calcular a área neste caso.

Se funciona, continuo sem perceber.

é claro que há pormenores a ter em conta para garantir que funciona em todos os casos, nomeadamente na última iteração.
Posted

E o que fazes nessa última iteração? Pelo que percebo, chegas à última iteração com uma stack completamente cheia com os prédios (ou seja, o vector original). Ou fazes algo alem de inserir o prédio caso a sua altura seja maior?

Posted

E o que fazes nessa última iteração? Pelo que percebo, chegas à última iteração com uma stack completamente cheia com os prédios (ou seja, o vector original). Ou fazes algo alem de inserir o prédio caso a sua altura seja maior?

uma solução muito simples para esse problema é adicionar sempre um prédio no fim com altura 0.

outra solução é no final ter um ciclo que esvazia a stack.

eu optei pela primeira alternativa.

  • 3 weeks later...
Posted

Por favor.... Voces tao para ai a falar de Big O notations(coisa que eu nao sei)... Podem postar o código? E que isto está mesmo a dar cabo das minhas unhas. Já tentei de todas as maneiras que conheço.

Thankz

  • 2 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.