TOPIC

PROBLEM 1197 - URI Fórum 1.0

URI Online Judge asked 8 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Carlos Bruno Oliveira Lopes replied 5 years ago

    Pessoal, eu sou professor de computação (engenheiro de computação) e verifiquei uma inconsistência nessa questão. A solução apresentada por ela (URI) que pode ser observada pelo toolkit e exemplos utilizam de execução do programa, no diz que resposta utiliza o conceito de movimento uniforme - MU (S = So + VT). No entanto, no enunciado é informado que temos um aceleração constante. E em momento algum do problema é informado que ao atingir a velocidade no dado tempo a aceleração irá para zero, indicando que a velocidade dada será uma velocidade média podendo realizar a seguinte operação: VT2; "que é a solução sugerida pelo URI dado as características de execução fornecidas pelo toolkit".

    Bem, sugiro que mudem a descrição desse problema porque a sua solução esta apresentando um erro de física muito grave. Pois, a solução deveria utilizar o conceito de movimento uniformemente variado - MUV, ou seja: * S = So + VoT + (1/2)a(t^2) V = Vo + aT;**

    e como o problema na fornece a (aceleração) e nem Vo (velocidade inicial) não tem como solucionar esse problema apresentado um valor numérico.

  • Luís Cury replied 6 years ago

    De fato, obrigado.

  • Vinicius Dalsasso replied 6 years ago

    Experimente digitar o seguinte caso de teste no código que estava dando errado:

    -1 10

    O programa encerra logo ao digitar o -1, não é?

    O problema no seu código era que EOF vale -1 (geralmente, parece que esse valor pode variar dependendo do sistema operacional), e caso em uma iteração o valor da variável v seja -1, o programa terminava, enquanto deveria continuar até que não houvesse entrada.

  • Luís Cury replied 6 years ago

    Boa tarde, Vinícius. Sua proposta de fato resolveu o problemam, obrigado. No entanto não entendi um detalhe, a função scanf retorna um valor inteiro indicando a quantidade de parâmetros efetivamente lidos. Neste caso, a função não leria qualquer parâmentro, retornando, portanto o valor 0, mas acredito que o valor de EOF não seja 0, baseado em tudo que já li.

  • Vinicius Dalsasso replied 6 years ago

    O problema não está no cálculo, mas na condição da parada (Uma variável não assume um valor "EOF", o EOF serve para verificar se ocorreu a entrada). Coloque o scanf da variável v dentro da comparação do while que irá funcionar.

    while (scanf("%d", &v)!=EOF){
  • Luís Cury replied 6 years ago

    Usando o toolkit, não achei qualquer caso de teste que não batesse que o resultado pedido. Por favor, poderiam me mostrar onde está o erro no código abaixo?

    /* URI 1197 */
    
    #include <stdio.h>
    
    int main(){
        int v, t;
        scanf("%d", &v);
        while (v!=EOF){
            scanf("%d", &t);
            printf("%d\n", 2*v*t);
            scanf("%d", &v);
        } 
        return 0;
    }
  • Leandro Vinicius replied 6 years ago

    Esse problema não pode ser resolvido sem saber o valor da aceleração. Pelo que eu vi aqui nos tópicos a galera resolveu usando velocidade constante, que existe se, e somente se a aceleração for diferente de zero. A aceleração vale zero mesmo? Se sim, sugiro uma correção no enunciado do problema.

  • JulienSoren replied 6 years ago

    Alguém me explica porquê aqui dá Possible RunTime Error

    import java.util.Scanner;
    import java.io.IOException;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
    
            try {
                Scanner s = new Scanner(System.in);
    
                int v;
                int t ;
                int d;
                while (s.hasNext()) {
    
                    v = s.nextInt();
                    t = s.nextInt();
                    d = (int) ( (1.0 / 2) * v * t * 4 );
    
                    System.out.printf("%d\n", d);
                }
    
                s.close();
            } catch (Exception e) {
    
            }
        }
    
    }

    E porquê aqui não dá ?

    import java.util.Scanner;
    import java.io.IOException;
    
    public class Main {
    
        public static void main(String[] args) throws IOException {
    
            try {
                Scanner s = new Scanner(System.in);
    
                int v;
                int t ;
                int d;
                while (s.hasNext()) {
    
                    v = s.nextInt();
                    t = s.nextInt();
                    d = (int) ( 0.5 * v * t * 4 );
    
                    System.out.printf("%d\n", d);
                }
    
                s.close();
            } catch (Exception e) {
    
            }
        }
    
    }
  • Carlos Andres Sierra replied 7 years ago

    Good day. I have a problem, and i hope you can help me. I have this code in java, but when it's execute the answer is: Time limit exceeded. I analyze the code and think that the problem is the EOF finish condition. Please, help me with this trouble. Thanks a lot.

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    
    public class Main
    {
        public static void main(String[] args)
        {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out));
    
            try
            {
                String line;
                String[] number;
                int x, y, value;
    
                while((line = br.readLine()) != null)
                {
                    number = line.split(" ");
                    x = Integer.parseInt(number[0]);
                    y = Integer.parseInt(number[1]);
                    value = x * y * 2;               
    
                    log.write(value + "\n");
                    log.flush();
                }
            }
            catch(Exception ex) {}
        } 
    }
  • Van Ribeiro replied 7 years ago

    Olá! Mesmo com a alteração sugerida por vc, ainda está dando TLE...[/quote]

    Olá nessa, Mil perdões pela minha falta de atenção! O enunciado diz que "O final da entrada é determinado por EOF."

    Para isso, você deve colocar uma condição em seu laço while para o programa parar. Como você não tem essa condição, o while vai rodar sempre.

    Tente colocar:

    while(scanf("%d %d", &t, &v) != EOF){

    ================================================================================= Ok! Sem problemas, eu que sou grata pela ajuda!!! Agora foi aceito! Muita Obrigada!!! ^_^

  • Lekzinn replied 7 years ago

    Olá nessa, Mil perdões pela minha falta de atenção! O enunciado diz que "O final da entrada é determinado por EOF."

    Para isso, você deve colocar uma condição em seu laço while para o programa parar. Como você não tem essa condição, o while vai rodar sempre.

    Tente colocar:

    while(scanf("%d %d", &t, &v) != EOF){
  • Van Ribeiro replied 7 years ago

    Olá! Mesmo com a alteração sugerida por vc, ainda está dando TLE...

  • Lekzinn replied 7 years ago

    Que estranho... a complexidade deste algoritmo não deveria dar TLE oO Tente o seguinte:

    Ao invés de atribuir um resultado a variável X, imprima o resultado direto

    printf("%d\n", (v * t)*2);

    Att,

  • Van Ribeiro replied 7 years ago

    Olá! Alguém pode me ajudar?

    O meu código está dando Time limit exceeded:

    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
     int t, v, x;
    
     while(scanf("%d %d", &t, &v)){
    
     x = (v * t)*2;
    
     printf("%d\n", x);
    
    }
    
      system("PAUSE");  
      return 0;
    }

    Desde já, muito obrigada!

  • Gerson Groth replied 7 years ago

    Tente ler da seguinte forma:

    while(cin >> v >> t){
  • Gustavo Mendonça replied 7 years ago

    O que tem de errado no meu código?

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int main(){
        int v,t,x;
        while(v!=EOF and t!=EOF){
            cin >> v >> t;
            x = (v*t)*2;
            cout << x << endl;
        }
    }
  • Roberto replied 7 years ago

    Se estiver falando de Java,

    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
    String line = null;
    while ((line = in.readLine()) != null) {
    // Algo aqui...
    }

    Abraços.

  • Jadson José Monteiro Oliveira replied 7 years ago

    Como posso fazer um EOF utilizando o bufferedReader para entrada?

  • Jean Bez replied 8 years ago

    Sem problema! Quando precisar é só pedir.

  • Cassiano de Mello Padilha replied 8 years ago

    Obrigado, consegui resolver essa questão, desculpe o incômodo.

1 of 2