TOPIC

PROBLEM 1512 - URI Fórum 1.0

URI Online Judge asked 5 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Matheus Paixão replied 3 years ago

    Alguém pode me dar uma ajuda, todos os casos que testei deram certo, já tentei por unsigned long long mas mesmo assim continuo recebendo 100% wrong.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
      unsigned long n, a, b;
      bool r;
    
      while (scanf("%lu %lu %lu", &n, &a, &b), n) {
        r = !(a % b) || !(b % a)? true: false;
        a = n / a;
        b = n / b;
    
        if (a != b)
          if (!(a % 2) && !(b % 2))
            a = (a + b) - abs(a - b);
          else if (r)
            a = a >= b? a: b;
          else
            a += b - 1;
    
        printf("%lu\n", a);
      }
    
      return 0;
    }
  • Israel Pinheiro Ruas Junior replied 4 years ago

    Galera já modifiquei várias vezes o meu código, mesmo assim não tive sucesso, já tomei uns 4 Time limit exceeded Se alguém pode me ajudar...

    [Accepted]

    Galera,não adianta usar for para resolver este problema..

    vc vai ter que achar o MDC, MMC.. isso aqui mais ou menos. Solução: A + B – (A U B) ((n/a)+(n/b)) - (n/(MMC(MDC(a, b))))

  • Miguel Araújo replied 5 years ago

    maateusx, você precisa de um método mais rápido. Recomendo o mesmo link que passaram logo acima: http://crbonilha.com/pt/contest-bonilha-editorial/#more-72. Cristiano Bonilha explica um jeito mais eficaz de resolver o problema sem levar TLE. Abraços

  • Beto Jamaíca replied 3 years ago

    Diversas outras pessoas já comentaram que a solução trivial resulta em TLE. Leia os comentários acima, inclusive com dicas sobre outra abordagem.

  • Michael Monteiro replied 3 years ago

    Alguém pode me ajudar? Está dando Time limit exceeded mas não encontro o erro

    #include <stdio.h>
    
    int main()
    {
    
        long long i,numero,a,b,pintados=0;
        while(scanf("%lld",&numero)!=0 && scanf("%lld",&a)!=0 && scanf("%lld",&b)!=0)
        {
            if(numero==0 && a==0 && b==0)
                break;
            for(i=1;i<=numero;i++)
            {
                if(i%a==0 || i%b==0)
                {
                    pintados++;
                }
            }
            printf("%lld\n",pintados);
            pintados=0;
        }
    
        return 0;
    
    }
  • Antik Guharoy replied 4 years ago

    Eu enviei este código, mas ele me dá 30% errado. Alguém por favor pode apontar o erro .

    #include<iostream>
    using namespace std;
    int main()
    {
        long int i,j,a,b,n,count=0,val;
        for(;;)
        {
            cin>>n>>a>>b;
            for(i=1;i<=a;i++)
            {
                if(n%i==0&&a%i==0&&b%i==0)
                {
                    n/=i;
                    a/=i;
                    b/=i;
                    i=1;
                }
            }
            if(n==0&&a==0&&b==0)
            {
                break;
            }
            count=(n/a)+(n/b)-(n/(a*b));
            cout<<count<<endl;
            count=0;
        }
        return 0;
    }
  • Israel Pinheiro Ruas Junior replied 4 years ago

    [Accepted]

    Não adianta usar laço até n,, sempre vai dar TLE, dica abaixo.

  • Mateus Pereira replied 5 years ago

    Não entendo porque o meu está dando Time limit exceeded

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        int n=1, a, b, s=0, i;
    
        while(n!=0)
        {
            scanf("%d %d %d", &n, &a, &b);
                if(n==0)
                    break;
    
            for(i=1; i<=n; i++)
            {
                if(i%a==0 || i%b==0)
                    s++;
            }
            printf("%d\n", s);
            s=0;
        }
    
        return 0;
    }
  • Wilson Estécio Marcílio Júnior replied 5 years ago

    Ola Cristhian, então, eu tentei implementar da forma que você explicou, mas deu tle (claro que não implementei da forma correta). O que eu disse acima, tirei desse link: http://www.had2know.com/academics/count ... lator.html . Abraço

  • Cristhian Bonilha replied 5 years ago

    Pompeu, eu sinceramente não entendi porque você acha que a questão está errada. Se pudesse explicar melhor eu agradeceria. O seu código também falha para casos onde os dois números são pares, tal como N=10, A=2 e B=4.

    wilson, eu não entendi sua lógica. Poderia explicá-la mehor? Você deu uma lida no blog ali em cima? Pode ajudar.

  • Wilson Estécio Marcílio Júnior replied 5 years ago

    Alguem tem um teste crítico?? Estou usando ⌊b/n⌋ - ⌈a/n⌉ + ⌊b/m⌋ - ⌈a/m⌉ - ⌊b/y⌋ + ⌈a/y⌉ + 1, onde y = LCM(n, m) e está dando TLE... b = n, m = a e b = n no caso...

  • Pompeu replied 5 years ago

    #include <cstdio>
    #include <cmath>
    
    int main()
    {
        unsigned long long int n,a,b,r,r2;
    
        while(1){
               scanf("%llu %llu %llu",&n,&a,&b);
    
            if(n==0){
                return 0;
            }
            if(a%2!=0 && b%2==0){ // troca de valores
                int sw;
                sw = b;
                b = a;
                a = sw;
            }
                if(a%2==0 && b%2 == 0){//pra dois numeros pares
                    r =  (n/a) + (n/b);
                    r2 = (n/a) - (n/b);
                    r2<0?r2*(-1):r2;
                    printf("%llu\n",(r-r2));
                }else if(a%2 !=0 && b%2 != 0){ // dois impares
                    r =  ceil((float)n/a) + ceil((float)n/b);
                    r2 = ceil((float)n/a) - ceil((float)n/b);
                    r2<0?r2*(-1):r2;
                    printf("%llu\n",r-r2);
                }else if(a%2 == 0 && b%2 != 0){ //  um par a um impar
                    r =  (n/a) + floor((float)n/b);
                    r2 =  (n/a) - ceil((float)n/b);
                    r2<0?r2*(-1):r2;
                    printf("%llu\n",r-r2);
                }
    
       }
    
        return 0;
    }

    questão bugada não lógica tomei 100% de erro!! sendo que todos casos de teste passam

  • Pompeu replied 5 years ago

    Essa explicação dele é bem lógica pra dois numero pares ^^ tirando isso não consegui, pra dois parar eu resolvi sussa. quanto tem dois ímpares como no exemplo ele erra!!

  • Gerson Groth replied 5 years ago

    O Cristhian fez um editorial com dicas para resolvê-lo. De uma olhada em http://crbonilha.com/pt/contest-bonilha-editorial/#more-72

  • Pompeu replied 5 years ago

    #include <cstdio>
    #include <set>
    
    int main()
    {
        unsigned long long int n,a,b;
        int r,i,r2;
    
        while(1){
               scanf("%llu %llu %llu",&n,&a,&b);
               std::set<int> myset;
                myset.insert(a);
                myset.insert(b);
            if(n==0){
                return 0;
            }
            i = 2;
            r = r2 = 0;
    
            while(r < n){
                r =  a * i++;
                if(r > n)
                    break;
                        myset.insert(r);
    
            }
            i = 2;
            while(r2 < n){
                r2 =  b * i++;
                if(r2 > n)
                    break;
                        myset.insert(r2);
    
            }
    
                printf("%d\n",myset.size());
    
       }
    
        return 0;
    }

    TLE da raiva, alguem sabe por que? acredito que uma forma mais rapida seria usando matematica, mais ainda não sei como T_T

  • Gabriel Duarte replied 5 years ago

    TLE- alguém pode ajudar, me dando outra visão de como resolver ?

    ACC
    MOD