Pagini: 1 2 3 [4] 5   În jos
  Imprimă  
Ajutor Subiect: 014 Secventa  (Citit de 36515 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
amadaeus
Client obisnuit
**

Karma: 28
Deconectat Deconectat

Mesaje: 93



Vezi Profilul
« Răspunde #75 : Aprilie 04, 2007, 23:23:37 »

Pai implementezi o rezolvare brute-force (care sigur te conduce la solutia corecta) si faci si un generator de teste. Pentru fiecare test, compari rezultatul obtinut prin brute-force cu rezultatul programului pe care vrei sa il verifici (poti face si un script bash care face chestia asta de 100 de ori, adica genereaza cate un test, ruleaza brute-ul, ruleaza programul tau si compara rezultatele). Wink
Memorat

"one of these days I'm going to cut you into little pieces..."
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #76 : Aprilie 04, 2007, 23:25:54 »

adik programul brut force ar insemna o rezolvare copilareasca (in sensul k luam totul pas cu pas) , presupunand o complexitate mare...
Memorat
Bluedrop_demon
Client obisnuit
**

Karma: -3
Deconectat Deconectat

Mesaje: 66



Vezi Profilul
« Răspunde #77 : Aprilie 04, 2007, 23:27:21 »

Dap!  Very Happy
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #78 : Aprilie 04, 2007, 23:33:44 »

o sa trebuiasca sa ma obisnuiesc cu chestii de aastea.... un brut force nu necesita prea mult timp pt rezolvare? /:)
Memorat
Bluedrop_demon
Client obisnuit
**

Karma: -3
Deconectat Deconectat

Mesaje: 66



Vezi Profilul
« Răspunde #79 : Aprilie 04, 2007, 23:39:33 »

Se poate intampla si asta, dar de cele mai multe ori nu.

De exemplu un backtracking daca il stii bine il scrii in 10 minute maxim si dupa aia poti sta sa astepti 10-20 minute sa rezolve un test. (In acest timp poti lucra la altceva lasandu-l sa ruleze intr-o alta fereastra). Apoi te uiti ce rezultat a dat si vezi daca poti descoperi o formula sau o dinamica... ceva cu complexitate mai mica.

La fel si la grafuri... daca ti se cere un anumit drum pe 100000 de noduri stii ca trebuie sa gasesti un algoritm foarte rapid, dar pana una alta bagi un Roy-Floyd ca poate apare o relatie  Thumb up
Memorat
stef2n
Nu mai tace
*****

Karma: 218
Deconectat Deconectat

Mesaje: 641



Vezi Profilul
« Răspunde #80 : Aprilie 04, 2007, 23:46:10 »

La fel si la grafuri... daca ti se cere un anumit drum pe 100000 de noduri stii ca trebuie sa gasesti un algoritm foarte rapid, dar pana una alta bagi un Roy-Floyd ca poate apare o relatie  Thumb up
Ai de gand sa astepti un Roy-Floyd pe 100000 de noduri? Tongue
P.S. Scuze ca e cam off-topic reply-ul meu.
Memorat

Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
Bluedrop_demon
Client obisnuit
**

Karma: -3
Deconectat Deconectat

Mesaje: 66



Vezi Profilul
« Răspunde #81 : Aprilie 05, 2007, 00:17:30 »

Tot off topic scuze: Pai vroiam sa subliniez ca intr-adevar poti sa si astepti mult. Dar daca folosesti brute-force uneori nu ai de ales  wink
Memorat
nparfene2004
Client obisnuit
**

Karma: 22
Deconectat Deconectat

Mesaje: 81



Vezi Profilul
« Răspunde #82 : Ianuarie 21, 2009, 22:23:00 »

Iau 90 de puncte la problema... Nu mai stiu ce sa optimizez...

Fac O(n) cu deque... orice element intra in deque o data si iese cel mult o data, deci cam un milion de operatii. De ce atunci TLE la un test mare? Eu credeam ca pe linux fac in 0.18 sec mai mult de 10 milioane de operatii (nu impartiri). Nu?
Memorat
Mishu91
Nu mai tace
*****

Karma: 169
Deconectat Deconectat

Mesaje: 751



Vezi Profilul
« Răspunde #83 : Ianuarie 21, 2009, 22:53:34 »

Incearca sa parsezi citirea
Memorat
nparfene2004
Client obisnuit
**

Karma: 22
Deconectat Deconectat

Mesaje: 81



Vezi Profilul
« Răspunde #84 : Ianuarie 22, 2009, 07:00:04 »

Scuze, ce inseamna sa parsez citirea? un exemplu?
Memorat
gabor_oliviu1991
Nu mai tace
*****

Karma: 28
Deconectat Deconectat

Mesaje: 200



Vezi Profilul
« Răspunde #85 : Ianuarie 22, 2009, 07:13:25 »

citesti numarul ca sir de caractere, si dupa il transformi in numar propriu-zis.
Memorat
nparfene2004
Client obisnuit
**

Karma: 22
Deconectat Deconectat

Mesaje: 81



Vezi Profilul
« Răspunde #86 : Ianuarie 22, 2009, 21:53:40 »

Adica

scanf("%s",sir) ;
x = atoi(sir) ;

prin asta s-ar intelege parsare?
Memorat
sima_cotizo
Nu mai tace
*****

Karma: 219
Deconectat Deconectat

Mesaje: 596



Vezi Profilul
« Răspunde #87 : Ianuarie 22, 2009, 22:12:54 »

Da, dar foloseste fgets() in loc de scanf() si poti incerca si sa implementezi atoi() de mana (cred ca e mai rapid).
Memorat
Sorin_Ionut
Client obisnuit
**

Karma: 14
Deconectat Deconectat

Mesaje: 53



Vezi Profilul
« Răspunde #88 : Martie 26, 2009, 10:32:50 »

Parsarea chiar face difrenta in problema asta (  Tongue doar pt cei cu 90p )
Sursa fara parsare http://infoarena.ro/job_detail/288827 (90p)
Sursa cu parsare http://infoarena.ro/job_detail/288886 (100p) detasat  Dancing
Uitati-va numai la timpi (parsare face totul , algoritmul este aceelasi (deque))
Pt cine nu stie sa faca parsare , dati-mi un pm si va ajut !
 Multa bafta !
Memorat
Alexa_ioana_14
Strain
*

Karma: 6
Deconectat Deconectat

Mesaje: 37



Vezi Profilul
« Răspunde #89 : August 17, 2009, 17:15:13 »

Fara parsare obtin 80p. Cu parsare 50 [pe restul WA]
Cam asa arata parsarea pe care o fac:
Cod:
scanf("%d%d\n",&n,&k);
fgets(s,N,stdin);
for (int i=0; s[i]&&s[i]!=10; ++i)
{
int nr=0;
int semn=1;
if (s[i]=='-')
{
semn=-1;++i;
}
bool ok=false;
while(s[i]>='0'&&s[i]<='9'&&s[i]&&s[i]!=10)
{
nr=nr*10+(s[i]-'0');++i;ok=true;
}
if (ok)
v[++num]=nr*semn;
}
Imi poate spune cineva unde gresesc? pls
« Ultima modificare: August 17, 2009, 17:20:45 de către Antoche Ioana Alexandra » Memorat
narcyyssss
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #90 : Noiembrie 13, 2010, 14:37:52 »

 Brick wall Brick wall Brick wall Brick wall Brick wall Brick wall Brick wall Brick wall Brick wall Brick wall Brick wall ](*,)nu inteleg de ce nu primesc mai mult decat 30 de  puncte am folosit doar  2 structuri repetitive Brick wall Brick wall
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #91 : Noiembrie 13, 2010, 14:39:29 »

Problema se face cu ajutorul unui deque.
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #92 : Noiembrie 14, 2010, 02:06:46 »

Problema se face cu ajutorul unui deque.

Se face fara deque.
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #93 : Noiembrie 14, 2010, 03:28:06 »

@toni: Esti sigur? Nu stiu ce solutie ai tu dar sunt destul de sigur ca merge si cu deque. De altfel as fi curios cum o faci fara deque.
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #94 : Noiembrie 14, 2010, 12:22:08 »

Da, ai dreptate, se pare ca eu o facusem prost. Aseara m-am uitat pe sursa mea (de prin 2008), si in loc sa scot din deque din dreapta, eu cautam binar pozitia si setam capatul din dreapta acolo. Am crezut ca e o coada cu ceva smen.
Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #95 : Noiembrie 14, 2010, 14:33:01 »

1 - 0 la spiderman. Smile
Memorat

Am zis Mr. Green
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #96 : Noiembrie 14, 2010, 17:12:36 »

1 - 0 la spiderman. Smile
Nu cred ca asta poate fi tratata ca o "batalie", poate ca el initial a vrut sa ajute, intentia conteaza Wink .
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #97 : Noiembrie 14, 2010, 23:49:52 »

1 - 0 la spiderman. Smile

Corect d'oh!
Memorat
valentin.harsan
Strain
*

Karma: 33
Deconectat Deconectat

Mesaje: 41



Vezi Profilul
« Răspunde #98 : Decembrie 14, 2010, 18:38:28 »

af facut o sursa cu deque  COD:

Cod:
#include<iostream>
#include<fstream>
using namespace std;
const int N=500001;
int a,s,smax,dr,st=1,d[N],v[N],n,k;
void stanga (int i) {
while ((i-d[st]>=k) && (v[d[st]]<v[d[st+1]])) {
++st;
}
}

void dreapta (int i) {
while (st<=dr && v[d[dr]]>=v[i]) {
--dr;
}
}

void adauga (int i) {
d[++dr]=i;
}

ifstream aa("secventa.in");
ofstream ss("secventa.out");
int main () {
smax=-10000;
int i;
aa >> n >> k;
for (i=1;i<=n;++i) {
aa >> v[i ];
stanga(i);
dreapta(i);
adauga(i);
if (i>=k && v[d[st]]>smax) {
smax=v[d[st]];
a=i-k+1;
s=i;
}
}
ss << a << " " << s << " " << smax;
return 0;
}

si iau 10 pct. nu inteleg unde am gresit.
ma poate ajuta cineva?

Editat de moderator: foloseste tagurile [ code ] si [ /code ] cand postezi cod. Lasa spatiu intre parantezele drepte si litera i, ca altfel textul ce urmeaza va fi italic.
« Ultima modificare: Decembrie 14, 2010, 18:43:56 de către Gabriel Bitis » Memorat
pauldb
Nu mai tace
*****

Karma: 821
Deconectat Deconectat

Mesaje: 1.901



Vezi Profilul
« Răspunde #99 : Decembrie 14, 2010, 19:16:39 »

Functia dreapta e problema. Incearca sa citesti mai multe aici.
Memorat

Am zis Mr. Green
Pagini: 1 2 3 [4] 5   În sus
  Imprimă  
 
Schimbă forumul:  

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