infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Andrei Parvu din Iunie 26, 2011, 07:18:39



Titlul: 1190 Grad
Scris de: Andrei Parvu din Iunie 26, 2011, 07:18:39
Aici puteţi discuta despre problema Grad (http://infoarena.ro/problema/grad).


Titlul: Răspuns: 1190 Grad
Scris de: Vasilut Lucian din Octombrie 24, 2012, 22:20:31
 :) Buna seara .La problema asta orice as face mai mult de 35 pct nu  iau ](*,)
Procedez in felul urmator:
1.Pt fiecare cuvant din propozitie(pe  care il extrag cu strtok ) ii calculez numarul asociat astfel:

Cod:
int rez=0
 for(int i=0; p[i] ;i++)
prod *= make_putere(p[i]-'0'-48,++rez);


unde make_putere calculeaza a la puterea b.

2.pt numarul gasit ii calculez divizorii cu o formula ...

3.la solutie adun nr de divizori modulo lungimea sirului

Mi se pare OK algoritmul insa nu stiu dc iau Incorect ](*,) ](*,) :'(

Vreo sugestie ceva?

Multumesc Anticipat!!! :)


Titlul: Răspuns: 1190 Grad
Scris de: Visan Radu din Octombrie 24, 2012, 22:29:37
Tocmai am luat 100, am facut asa: gradul cuvantului l-am descompus in factori primi ca sa imi fie usor sa aflu numarul de divizori. O sa ai nevoie de un vector V unde sa tii V[ i ] - de cate ori apare i in descompunerea in factori primi a gradului.
Cand iei o litera, inmultesti gradul cu un numar de forma X ^ Y. Descompui pe X in factori primi, iar in V in loc sa faci V[factorprim] += puterea, faci V[factorprim] += puterea * Y, pt ca daca te uiti 4 ^ 3 poti sa il scrii ca (2 ^ 2) ^ 3 = 2 ^ 6, 2 ^ 2 fiind descompunerea in factori primi a lui 4.
La final iterezi prin numerele prime si faci numarul de divizori dupa formula si aduni la solutie. Dupa ce termini cu un cuvant sa faci V[ i ] = 0 peste tot. :ok:


LE: problema la tine, cel mai probabil, e ca daca ai o propozitie dintr-un singur cuvant cu 255 de litere, iar ultima litera e z, ai 26 ^ 255, ceea ce e mult prea mult.