TOPIC
PROBLEM 1758 - URI Fórum 1.0
This topic was solved and cannot recieve new replies.
-
pgpierina replied 7 years ago
Os exemplos do uri dao certo, mas ele nao aceita o codigo. Segue o codigo em baixo.
define _CRT_SECURE_NO_WARNINGS
include
include
void main() { int o, k, q, c, t, p, n, i, j, x;
double aux, soma, nota[50], media; //media tem dois pontos decimais //nota tem um ponto decimal scanf("%i", &t); for (i = 0; i < t; i++) { scanf("%i", &p); //quantidade de provas scanf("%i", &n); //quantidade de alunos for (j = 0; j < n; j++)//para cada aluno separado { media = 0; aux = 0; soma = 0; for (x = 0; x < p; x++)//pegar nota de cada { scanf("%lf", ¬a[x]); soma = soma + nota[x]; } media = soma / (x); //Ordenar para achar nota maior para media[0] for (c = 0; c < (p - 1); c++) { for (q = 0; q < (p - c - 1); q++) { if (nota[q]>nota[q + 1]) { aux = nota[q]; nota[q] = nota[q + 1]; nota[q + 1] = aux; } } } //Printar a maior nota se nota for entre 4 e 7 if (media<7 && media >= 4) { if (nota[q + 1]>media && nota[q + 1]<7) { printf("%.2lf\n", nota[q + 1]); } else { if (nota[q]>media && nota[q]<7) { printf("%.2lf\n", nota[q]); } else { if (nota[q - 1] > media && nota[q - 1]<7) { printf("%.2lf\n", nota[q - 1]); } else { if (nota[q - 2] > media && nota[q - 2]<7) { printf("%.2lf\n", nota[q - 2]); } else { if (nota[q - 3] > media && nota[q - 3]<7) { printf("%.2lf\n", nota[q - 3]); } else { printf("%.2lf\n", media); } } } } } } if (media < 4.0) { printf("%.2lf\n", media); } if (media >= 7.0) { printf("%.2lf\n", nota[x - 1]); } } } system("pause");
}
-
mmendes2 replied 8 years ago
Neste caso o aluno vai pra prova final, a sua nota então será calculada da seguinte maneira:
A média é 4.8, daí vc pega a maior nota dele que seja maior que a média e menor que 7.
No exemplo acima temos que 10 é maior que 4.8 e maior que 7, descarta ela; 5.0 é maior que 4.8 e menor que 7; e 4.0 é menor que 4.8.
A maior nota dele maior que a média e menor que 7 é 5.0.
Eu também demorei pra entender isso. Implementei e consegui o Accepted.
-
thalyson004 replied 9 years ago
devem ter tirado todos os casos que a precisão daria problema, o AC Rate foi de 0.8% para 79.21% '-'
-
DamiHenrique replied 9 years ago
Depois de um 1kg de w.a e algumas gambs, meu código não bate nem com todos os casos de exemplo e recebi accepted.. (y)
-
MiguelAraujo replied 9 years ago
Galera, levei 100% WA nesta questão, mas tenho certeza que não tem nada errado no meu código. Eu coletei umas entradas fornecidas por MilesMatheson e meitcher (+- 1K casos) e verifiquei. Todos os resultados batem com o toolkit. Como posso estar levando 100% WA desta forma?
Abaixo segue meu código. Grato desde já!
AC!
O problema foi rejulgado e recebi Accepted.
-
thalyson004 replied 9 years ago
do jeito que vc ler a questão, aparenta que as saídas devem ser truncadas em duas casas, porém não é isso o esperado
porém parece que a questão está com erro na correção, pois nem mesmo o autor do problema conseguiu passar ela xD
-
mtreviso replied 9 years ago
Tem algumas dicas para o código ficar mais rápido em python:
-
Faça a leitura usando o sys.stdin.readline();
-
Faça o split() e já aplica os tipos com um map: notas = map(float, sys.stdin.readline().split());
-
Nunca use range(n) para iterar, use xrange(n). A diferença entre os dois é que range gera uma lista de 1 a n e depois itera sobre cada posição dessa lista, já xrange faz i+1 e devolve esse valor (faz um yield por baixo dos panos);
-
Cada laço do python é muito lento, sendo assim tente economizar o máximo de laços possíveis.
-
Se o URI permite (acho que sim), adicione o módulo psyco e chame o método full(), dependendo do código isso fica mais rápido:
try: import psyco psyco.full() except: pass
No seu caso, o segundo laço pode ser incluso junto com o primeiro, acho que com isso seu código talvez irá passar, porém não tenho tanta certeza, pois reenviei o código python que recebeu AC, e ele ganhou TLE. Ou seja, tem que pedir para os moderadores aumentarem o tempo limite para python para pelo menos 1.5s.
Valeu!
-
-
gduarte replied 9 years ago
MODEu tentei fazer em Python como meitcher disse, porém estou tomando TLE. Ainda não sei muito sobre Python talvez seja os métodos de leitura e escrita, será que alguém pode me auxiliar ?
TC = input(); while(1): TC -= 1 s = raw_input() s = s.split(' ') p = int(s[0]) n = int(s[1]) alunos = [] media = [] for i in range(0, n): aux = 0 x = raw_input() x = x.split(' ') alunosAux = [] for j in range(0, p): y = float(x[j]) alunosAux.append(y) aux += alunosAux[j] alunos.append(alunosAux) media.append(aux / p) for i in range(0, n): if media[i] < 4.0: print "%.2f" % media[i] elif media[i] >= 7.0: ans = 0; for j in range(0, p): ans = max(ans, alunos[i][j]) print "%.2f" % ans else: ans = media[i] for j in range(0, p): if alunos[i][j] > ans and alunos[i][j] < 7.0: ans = max(ans, alunos[i][j]) print "%.2f" % ans; if(TC == 0): break
-
mtreviso replied 9 years ago
Aqui tem mais: https://gist.github.com/meitcher/9373366dd2b63463c863
Utilizando long double também recebi WA 10%. Acho que é erro por causa da precisão mesmo.
Valeu!
-
mtreviso replied 9 years ago
Teste com os seguintes casos de teste:
2 3 5 3.1 7.7 0.5 0.5 5.9 5.5 0.1 8.5 9.2 9.3 4.6 8.0 5.4 3.5 0.0 5 5 9.0 10.0 6.0 6.0 6.0 10.0 5.0 5.0 5.0 5.0 10.0 5.0 5.0 4.0 0.0 4.0 4.0 4.1 4.0 3.9 6.9 6.9 6.9 7.0 6.9
Valeu!
-
mtreviso replied 9 years ago
Acabei de submeter o mesmo código em Python (com 1K de otmizações, tem que aumentar o tempo limite aí) e passou. Será então que temos que utilizar alta precisão para passar? Mas não vejo o problema, uma vez que usei inteiros para todas as comparações, única exceção são os printfs que necessitam conversão para double...
-
mtreviso replied 9 years ago
Estou recebendo WA (70%) nesse problema, porém não consegui encontrar um bug no meu código ou um caso de teste contraditório. Tem como alguém me ajudar?
removido após acc
Será que é erro de arredondamento na hora de printar?