Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 1282 Palindrom3  (Citit de 3547 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
andrei.12
Echipa infoarena
Nu mai tace
*****

Karma: 107
Deconectat Deconectat

Mesaje: 381



Vezi Profilul
« : Aprilie 21, 2012, 08:18:30 »

Aici puteti discuta despre problema Palindrom3.
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #1 : Aprilie 21, 2012, 12:02:50 »

Serios mah, 6 autori? Smile)))
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #2 : Aprilie 21, 2012, 12:05:18 »

Asa scrie in solutia oficiala, pe toti 6 ii scrie la final.
Citat
Autori:    
Student Robert Hasna
Student Vlad Ionescu
Student Cosmin Tutunaru
Student Vlad Duţă
Student Dragoş Oprică
Student Alexandru Cazacu
Memorat
DraStiK
Nu mai tace
*****

Karma: 131
Deconectat Deconectat

Mesaje: 207



Vezi Profilul
« Răspunde #3 : Aprilie 21, 2012, 19:24:15 »

Pai era un compartiment intreg din ONI Expres. Smile)
Memorat
geniucos
Vorbaret
****

Karma: 21
Deconectat Deconectat

Mesaje: 199



Vezi Profilul
« Răspunde #4 : Mai 31, 2013, 17:06:12 »

Salut!Am luat testul 3 si mie imi da un numar care incepe cu 2, iar la raspuns incepe cu 9(asta e singura diferenta).Ambele sun divizibile cu k dar nu stiu de ce mie imi da costul mai mic(ceea ce nu prea cred ca se poate).Ma poate ajuta si pe mine cineva?
Multumesc anticipat.
Memorat
vendetta
De-al casei
***

Karma: 72
Deconectat Deconectat

Mesaje: 122



Vezi Profilul
« Răspunde #5 : Iunie 11, 2013, 21:34:16 »

Nu am reusit sa inteleg exact dinamica ta... Dar tin minte ca si eu aveam probleme asemanatoare si din cat tin minte problema era la formarea noului rest. gen ma duc din starea (i, rest) in (newI, newRest) doar ca modul in care formam newRest nu era corect.
Memorat
geniucos
Vorbaret
****

Karma: 21
Deconectat Deconectat

Mesaje: 199



Vezi Profilul
« Răspunde #6 : Iunie 17, 2013, 16:26:06 »

M-am gandit si eu ca gresesc asta dar cifra de pe pozitia aia nu influenteaza cu nimic restul practic daca te uiti in numarul mare ea este inmultita cu un numar de genul 100..01 care impartit la K da restul 0.Deci practic cifra aia nu are decat rol de a minimiza costul.M-am uitat de ai multe ori sa vad daca nu cumva am gresit cand am calculat numarul ala cu 0 si 1 modulo K dar nu prea vad unde as fi putut gresi.  Confused
Memorat
vendetta
De-al casei
***

Karma: 72
Deconectat Deconectat

Mesaje: 122



Vezi Profilul
« Răspunde #7 : Iunie 17, 2013, 17:19:43 »

Intr-adevar, rolul cifrei diferite e doar de a minimiza costul; doar ca tu obti acest numar, cred, dintr-un numar pe care nu il puteai forma. Tind sa cred ca formula, dupa care formezi restul, e gresita. Descrie modul cum formezi noul rest...
Memorat
geniucos
Vorbaret
****

Karma: 21
Deconectat Deconectat

Mesaje: 199



Vezi Profilul
« Răspunde #8 : Iunie 18, 2013, 14:53:51 »

Pai numarul cu care inmultesc cifra este 11,1001,100001,....Adica este 10*100^ceva+1.Se poate obtine numarul pe care il returneaza programul meu pentru ca am verificat de mana.Si eu cred ca problema ar putea fi la formare numarului cu care inmultesc dar nu prea vad nici o greseala.  sad
Memorat
RazvanR104
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 14



Vezi Profilul
« Răspunde #9 : Martie 01, 2015, 22:18:07 »

Salut,

Am facut problema. Dar am o intrebare.
Cunosc doua metode de a calcula resturile in dinamica. Aparent, una merge, cealalta nu.

Prima, cea de 100, este chiar cea din descrierea solutiei realizata de autori.
Cod:
int new_rest = (j + (P10[len - i] + P10[i - 1]) * k) % K;
unde j este vechiul rest, P10[y] = (10 ^ y) % K, k noua cifra adaugata la inceputul si sfarsitul numarului anterior din dinamica si K - numarul din input cu care numarul trebuie sa se divida

A doua:
Cod:
int new_rest = (j + P10[len - 2 * i + 1] * k) % K;
new_rest = (new_rest * P10[1] + k) % K;

Literele au ramas identice cu cele de mai sus.
Inteleg ambele variante, insa, a doua pare a fi incorecta. Nu inteleg de ce.

Ma poate ajuta cineva?

Va multumesc anticipat! Very Happy
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #10 : Martie 02, 2015, 01:12:52 »

Nu iese matematic ce ai scris acolo. Cum ai dedus acea formula?
Memorat
RazvanR104
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 14



Vezi Profilul
« Răspunde #11 : Martie 02, 2015, 09:30:02 »

Eu m-am gandit asa.

Sa spunem ca am un numar de forma aa si vreau sa-l aduc la forma baab.

Am restul de la aa, il numesc Rest. Ca sa aflu restul de la baab, fac urmatorul lucru.

aa * 10 + b -> (Rest * 10 + b) % K
si am restul lui aab la impartirea cu K acum

Adaug si b in fata
=> b * (10 ^ 3) + aab -> (b * (10 ^ 3) + Restul_lui_aab_la_impartirea_cu_K) % K

Si acum m-am gandit ca iese restul lui baab la impartirea cu K.

Rezultatele partiale ar trebui sa fie diferite fata de cealalta formula. Dar ma gandesc ca cel final ar trebui sa fie acelasi...

Ce e gresit? sad
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #12 : Martie 02, 2015, 13:12:09 »

Acum inteleg de unde vine. Formula din codul tau e ((j + 10N-2i+1 * k) * 10 + k) % K.
In cod adaugi invers cifrele. Deci, in exemplul tau ar trebui sa adaugi b * 102, fiindca exista doar aa deocamdata.
Memorat
RazvanR104
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 14



Vezi Profilul
« Răspunde #13 : Martie 02, 2015, 18:28:37 »

Nu merge... L-am scris in ambele moduri, nu iau 100p cu asta.... Ceva trebuie sa fie gresit.

//LE: Am inteles greseala asupra careia mi-ai atras atentia, si (cel putin cred eu) am corectat corespunzator.

Cod:
int new_rest = (j + P10[len - 2 * i] * k) % K;
new_rest = (new_rest * P10[1] + k) % K;

52p sad
« Ultima modificare: Martie 02, 2015, 18:49:30 de către Razvan-Andrei Ciocoiu » Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #14 : Martie 03, 2015, 00:12:16 »

E gresita abordarea inversa. Mergand de la stanga la dreapta (i=1..N/2), tu practic stergi cifrele din capat (baab -> aa). Din pacate, asta face ca, avand o cifra k, sa poti sa ajungi din restul curent in mai multe resturi diferite cu acelasi cost.

Cel mai simplu test pe care l-am putut gasi este:
1 0 0 0 0 0 0 0 0 0
5015
5

Raspunsul corect e 5115 iar in varianta ta da 5005.

Asta fiindca daca adaugi la margine cifra 5, numarul devine 5xx5. Indiferent daca adaugi 5-ul la restul 0 sau 1, obtii tot restul 0. In general, j * 10 % K poate da valori egale pentru j-uri diferite. N-ai de unde sa stii care rest e cel bun.

In schimb, in varianta corecta j-ul nu se inmulteste cu nimic si, deci, pentru fiecare new_rest si o cifra k ai un unic j.

Interesant Smile
Memorat
badea_adi1999
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #15 : Martie 30, 2015, 13:55:25 »

Salut! Smile
Am si eu o intrebare , daca poate sa imi raspunda cineva.
Am rezolvat problema tot cu programare dinamica , asemenator cu solutia comisiei , doar ca nu am inceput de la mijloc (pentru ca nu mi se pare normal)
Am calculat intr-un vector puterile de zece modulo k , si am incercat , de la 1 la n/2 , sa pun urmatoarea cifra j , adaugand la restul actual j*zece + j * zece[n-i+1] (corespondentul)
Ma lovesc de testul al doilea , unde tabloul este 3 2 7 8 1 4 0 5 9 6 si k=3.
Numarul meu este mai mic decat cel al comisiei , avand doar 4 diferente (2 in primele n/2 cifre)
Este o pereche de 4 si 2 , pe care eu le fac 2 si ei 4, si o pereche de 8 cu 6 , pe care eu le fac 8 si ei le fac 6 .
Astfel suma cifrelor este exact aceeasi (k==3) , ambele sunt palindroame divizibile cu k ,
dar la mine mi se pare ca sunt 2 transformari mai putin si nu inteleg de ce nu e bine. sad
Intai am cautat sa am numar minim de trasnformari si pentru numarul minim am cautat ca raspunsul sa fie maxim.

Multumesc in avans pentru ajutor! Smile
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines