polska Posted May 1, 2013 at 09:41 PM Report #505521 Posted May 1, 2013 at 09:41 PM Esta-me a escapar algo.. Como estou a assumir isso? Por calcular a primeira pedra a partir das 3 posições seguintes e não considerar a própria primeira pedra? Eu já tinha lido o input com índices de 1 a N e depois calculava o próprio i=0 que significa a tal posição 0, que é antes da primeira pedra.. Mas o resultado foi o mesmo.. Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
mogers Posted May 1, 2013 at 09:50 PM Report #505523 Posted May 1, 2013 at 09:50 PM best = pedras[N-1]; Não podes fazer isto porque N pode ser maior que K. Podes evitar estas inicializações e começar o ciclo em N-1 se admitires que em N o melhor é zero. if(dir[i] > best) best = dir[i]; if(esq[i] > best) best = esq[i]; Idem, pelo mesmo motivo. Deves ver os dir[] e esq[] de 0..K-1. Se já tinhas tentado calcular a partir de 0, deves ter feito algum bug noutro sitio como a inicialização do best. "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.
polska Posted May 1, 2013 at 10:21 PM Report #505532 Posted May 1, 2013 at 10:21 PM best = pedras[N-1]; Não podes fazer isto porque N pode ser maior que K. Podes evitar estas inicializações e começar o ciclo em N-1 se admitires que em N o melhor é zero. if(dir[i] > best) best = dir[i]; if(esq[i] > best) best = esq[i]; Idem, pelo mesmo motivo. Deves ver os dir[] e esq[] de 0..K-1. Se já tinhas tentado calcular a partir de 0, deves ter feito algum bug noutro sitio como a inicialização do best. Eu já tinha alterado essas inicializações todas, já as tinha retirado e feito o ciclo a começar em N-1 . Quando testei a própria posição 0, falta mesmo esse caso de testar o best, faltava mesmo apenas testar de 0 a K-1... Agora já deu os 60 pts, obrigado pela ajuda 😉 Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
JoaoSantos95 Posted May 2, 2013 at 06:55 PM Report #505640 Posted May 2, 2013 at 06:55 PM (edited) Estou aqui com um problema no exercício B das ONI de 2012: Enunciado: http://www.dcc.fc.up.pt/oni/problemas/2012/final/probB.html Meu Código: http://pastebin.com/ebRzU3DV Dadas as coordenadas inteiras 2D de uma sequência de arranha-céus retangulares, estando a sequência ordenada pela distância crescente em relação ao ponto de onde tiras a foto, a tua tarefa é calcular duas coisas. Primeiro, o número de arranha-céus que são visíveis, ou seja, que aparecem na foto (ainda que apenas parcialmente). Segundo o máximo número de arranha-céus que estão uns atrás dos outros, ou seja, o maior número de edifícios que estão numa mesma posição do quadriculado. As coordenadas são dadas na forma: X_inicial, X_final, Altura. Tive Wrong Answer (19 pontos) no exercício, estou aqui a matutar e não consegui descobrir porquê. No entanto, fiquei na ideia que o erro do problema tinha haver com quando os edifícios tinham x_inicial[ j ] = x_final. Para ter a certeza quanto a isso, alguém me consegue dizer qual seria a resposta para o input: 5 3 5 6 4 4 20 4 6 7 11 12 8 11 13 9 Edited May 2, 2013 at 06:55 PM by JoaoSantos95
mogers Posted May 2, 2013 at 07:44 PM Report #505650 Posted May 2, 2013 at 07:44 PM Para ter a certeza quanto a isso, alguém me consegue dizer qual seria a resposta para o input: 5 3 5 6 4 4 20 4 6 7 11 12 8 11 13 9 5 3 "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.
mogers Posted May 2, 2013 at 08:09 PM Report #505655 Posted May 2, 2013 at 08:09 PM 3 1 5 4 6 10 5 3 8 3 A resposta é 2 2 "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.
JoaoSantos95 Posted May 2, 2013 at 08:31 PM Report #505657 Posted May 2, 2013 at 08:31 PM obrigado pela ajuda. Vou resolver o problema relativo ao último output que puseste ; )
skiller10 Posted May 2, 2013 at 11:26 PM Report #505675 Posted May 2, 2013 at 11:26 PM É já amanhã a final. Descansem bem para amanhã darem o vosso melhor. Boa sorte! "Eu acredito que a vida está constantemente nos testando em nosso nível de confiança, e a vida tem grande recompensa reservada àqueles que demonstram uma confiança sem fim para agir até conseguir. Este nível de resolução pode mover montanhas, mas ele tem de ser constante e consistente. Tão simples quanto isso possa soar, ainda é o denominador comum que separa aqueles que vivem seus sonhos dos que vivem simplesmente.."
anolsi Posted May 3, 2013 at 08:56 AM Report #505684 Posted May 3, 2013 at 08:56 AM Bom trabalho para todos os finalistas. Espero que desfrutem da final. 🙂 "Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."Não respondo a questões por PM que possam ser colocadas no fórum!
Pedro Ribeiro Posted May 4, 2013 at 10:25 AM Report #505796 Posted May 4, 2013 at 10:25 AM (edited) A final realizou-se ontem, dia 3 de Maio, no DCC/FCUP: - Classificação da Final - Problema A: Alice no País dos Primos - Problema B: Constelação Retangular - Problema C: Apagando Letras - Álbum de Fotos Parabéns a todos os finalistas por lá terem chegado, mas de um modo especial felicito o Afonso Santos, pelo 1º lugar, e o 4 primeiros (Afonso Santos, Pedro Silva, David Gomes e Victor Meriqui) por se terem apurado para representar Portugal nas IOI'2013, em Brisbane (Austrália). Edited May 4, 2013 at 10:35 AM by Pedro Ribeiro
SirDave Posted May 4, 2013 at 11:52 AM Report #505808 Posted May 4, 2013 at 11:52 AM Eu gostava de ver uma solução do B com somas acumuladas visto que eu bem tentei mas não consegui. Parabéns aos outros finalistas e ao professor pelos problemas! Be nice to see your eyes, blink them from time to time to relax your retina when using the computer. Blink now!
mogers Posted May 4, 2013 at 12:48 PM Report #505812 Posted May 4, 2013 at 12:48 PM É mais produtivo se explicares o que fizeste exactamente e a parte que não conseguiste fazer. "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.
polska Posted May 4, 2013 at 01:44 PM Report #505817 Posted May 4, 2013 at 01:44 PM Parabéns a todos, em especial aos 4 primeiros 😉 . E parabéns também a todos que tornaram possível mais uma realização das ONI 👍 . Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
SirDave Posted May 4, 2013 at 07:47 PM Report #505829 Posted May 4, 2013 at 07:47 PM Tens razão, aqui vai: Eu tinha uma array horizontal[N_LINHAS][N_COLUNAS]. Se a linha 4 fosse do tipo: . . . . E . E . . E A array horizontal[4][] ficava assim: {0, 0, 0, 0, 1, 1, 2, 2, 2, 3}. Ou seja, somas acumuladas. Depois, para um certo retângulo a fórmula do impacto seria: for (i = 0; i < h; i++) // h = altura do quadrado { hor[y + i][x] - hor[y][x - 1] + hor[y][x + largura] - hor[y][x + largura - 1]; } Depois fazia todos os Xs, todos os Ys, todas as larguras e todas as alturas. Há, ainda, o problema de haver uma estrela no canto do retangulo, que teria de corrigir "à mão". Posso ter tido algum erro lá no DCC mas isso não me estava a dar valores certos, vou tentar resolver outra vez mais tarde, só queria era um mooshaq. Be nice to see your eyes, blink them from time to time to relax your retina when using the computer. Blink now!
polska Posted May 4, 2013 at 07:50 PM Report #505830 Posted May 4, 2013 at 07:50 PM Eu pensei em muitas coisas diferentes para resolver o problema, inclusive as somas acomuladas, mas acabei por não conseguir implementar uma solução que respondesse certo. Depois fazia todos os Xs, todos os Ys, todas as larguras e todas as alturas. Há, ainda, o problema de haver uma estrela no canto do retangulo, que teria de corrigir "à mão". Posso ter tido algum erro lá no DCC mas isso não me estava a dar valores certos, vou tentar resolver outra vez mais tarde, só queria era um mooshaq. O ano passado os servidores não abriram para a final 2012, não sei se este ano será diferente, mas também gostava que sim. Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
mogers Posted May 5, 2013 at 01:10 PM Report #505866 Posted May 5, 2013 at 01:10 PM (edited) Tens razão, aqui vai: Eu tinha uma array horizontal[N_LINHAS][N_COLUNAS]. Se a linha 4 fosse do tipo: . . . . E . E . . E A array horizontal[4][] ficava assim: {0, 0, 0, 0, 1, 1, 2, 2, 2, 3}. Ou seja, somas acumuladas. Depois, para um certo retângulo a fórmula do impacto seria: for (i = 0; i < h; i++) // h = altura do quadrado { hor[y + i][x] - hor[y][x - 1] + hor[y][x + largura] - hor[y][x + largura - 1]; } Depois fazia todos os Xs, todos os Ys, todas as larguras e todas as alturas. Há, ainda, o problema de haver uma estrela no canto do retangulo, que teria de corrigir "à mão". Posso ter tido algum erro lá no DCC mas isso não me estava a dar valores certos, vou tentar resolver outra vez mais tarde, só queria era um mooshaq. Na formula tens 3 valores em y, deviam ser 2 em y e 2 em y+i Usa variaveis temporarias para os cantos - o código fica mais facil de ler. Assumindo que o canto inferior é (x,y) e o superior (x+largura-1, y+i-1), devia ser hor[y+i][x + largura - 1] - hor[y+i][x-1] + hor[y][x + largura - 1] - hor[y][x-1]; Muito mais legivel se escreveres x2 = x + largura - 1 y2 = y + i impacto = hor[y2][x2] - hor[y2][x-1] + hor[y][x2] - hor[y][x-1]; Faltam é os valores da vertical Edit: Eu usei as somas acumuladas dessa forma. No entanto, também poderias usar da forma comum. o valor do perimetro é o valor das estrelas nesse quadrado menos o valor da soma do quadrado interior Edited May 5, 2013 at 01:13 PM by mogers "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.
SirDave Posted May 5, 2013 at 02:52 PM Report #505870 Posted May 5, 2013 at 02:52 PM (edited) Mas a minha ideia é só guardar horizontais e fazer um loop por todas as "linhas" horizontais do retângulo e assim não precisava de guardar valores verticais. No entanto, também poderias usar da forma comum. o valor do perimetro é o valor das estrelas nesse quadrado menos o valor da soma do quadrado interior Esse era o meu objetivo, era um somas acumuladas "geral" como no Max Sum (que é com a área em vez do perímetro), mas não me lembrei dessa ideia, é fixe. Edited May 5, 2013 at 02:59 PM by thoga31 Adição das tags QUOTE com a referência apropriada Be nice to see your eyes, blink them from time to time to relax your retina when using the computer. Blink now!
mogers Posted May 5, 2013 at 05:53 PM Report #505876 Posted May 5, 2013 at 05:53 PM Mesmo assim continuam a faltar os +i da linha actual que estás a processar. No entanto, acaba por ser desnecessario dentro do ciclo porque só estás a adicionar 2 pontos (mat[y+i][x] e mat[y+i][x+largura-1]). "What we do for ourselves dies with us. What we do for others and the world, remains and is immortal.", Albert Pine Blog pessoal : contém alguns puzzles, algoritmos e problemas para se resolver com programação.
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now