TOPIC

PROBLEM 2291 - URI Fórum 1.0

URI Online Judge asked 4 years ago

URI Online Judge Fórum 1.0

MOD

This topic was solved and cannot recieve new replies.

  • Thales Augusto replied 4 years ago

    Oq preciso fazer para não continuar dando Time limit exceeded??

    #include<iostream>
    #include<queue>
    #include<math.h>
    
    using namespace std;
    
    int main(){
        queue<int> fila;
        int n, maior = 0, raiz;
        long int *soma;
    
        cin >> n;
    
        while(n){
            fila.push(n);
            if(n > maior)
                maior = n;
    
            cin >> n;
        }
    
        // Criando vetor do somatorio dos divisores
        soma = new long int[maior];
        soma[0] = 1;
    
        for(int i = 1; i < maior; i++){
            raiz = sqrt(i + 1) + 1;
            soma[i] = soma[i-1];
            //soma[i] = 0;
    
            for(int j = 1; j <= raiz; j++){
                if((i + 1) % j == 0){
                    soma[i] += j;
                    if((i + 1) / j > raiz)
                        soma[i] += (i + 1) / j;
                    //cout << "soma: " << soma[i] << endl;
                }
                //cout << "i: " << i << "  j: " << j << endl;
            }
        }
    
        while(!fila.empty()){
            n = fila.front();
            fila.pop();
    
            cout << soma[n-1] << endl;
        }
    
        return 0;
    }