infoarena

infoarena - concursuri, probleme, evaluator, articole => .CAMPION => Subiect creat de: Gafton Paul din Iulie 18, 2011, 20:49:10



Titlul: Secvb
Scris de: Gafton Paul din Iulie 18, 2011, 20:49:10
Va salut. Sunt nou pe forum, si intr-ale programarii (un an de programare nu e chiar mult, nu?). Mai fac din cand in cand probleme pe .campion...si acum m-am impiedicat de una. Problema este secvb: http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=1221. Am refacut implementarea de vreo 4-5 ori, prin diverse metode, cu stl sau fara (momentan incerc sa fac toate problemele in c, procedural. Mi se pare o practica buna sa stiu ce e in spatele functiilor), si pe toate sursele iau 80 (debugul nu e o solutie...sunt 40000 de numere....).
Am implementat o functie care returneaza numarul de cifre de 1 din numar, si le asez in vectorul a. b este o coada. Am inteles ca nu e voie sa pun toata sursa...asa ca pun doar functia subs, care imi returneaza numarul de subsiruri cu suma max din vectorul a, care are n elemente.

Cod:
long subs(long n, long max){

    long sum=0, k=0;
    for(int i=0; i<n;){
        if(sum<max){
            p.push(a[i]);
            sum+=a[i];
            i++;
            if(sum==max){
                k++;
                sum-=p.front();
                p.pop();
            }
        }else{
            if(sum==max){
                k++;
                sum-=p.front();
                p.pop();
            }else{
                sum-=p.front();
                p.pop();
            }
        }
    }

    return k;
}

Nu stiu unde e problema...pe teste mici merge...asa ca nu ma gandesc decat la ceva de ordin fie algoritmic, fie in tipurile de date.

Va multumesc.


Titlul: Răspuns: Secvb
Scris de: Mihai Calancea din Iulie 18, 2011, 22:16:17
Scuze, nu ti-am urmarit codul pana la capat, dar din cate imi dau seama raspunsul nu se incadreaza in int neaparat. Iti trebuie long long. ( Vezi ca long = int  :) ) Ar putea fi asta.