Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: ZigZag Topcoder  (Citit de 2283 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
yrar
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 17



Vezi Profilul
« : Februarie 17, 2010, 14:21:19 »

Am luat problema ZigZag de pe topcoder, http://www.topcoder.com/stat?c=problem_statement&pm=1259&rd=4493 , am facut (bine, zic eu) algoritmul dar nu merge bine afisarea.

Cod:
#include <fstream>
#define k 300

using namespace std;

int l[k], a[k], p[k], n, lmax, val=-1;
// p[i] = valoarea precedenta de a[i]

ifstream f("sec.in");
ofstream g("sec.out");

int sc(int a, int b)
{
if(b-a>0) return 0;
return 1;
}
// sc returneaza 0 sau 1, in functie de diferenta (pozitiva sau negativa)

int afis(int poz)
{   
if(poz==1) return 0;
if(!lmax)
{ if(val!=-1)
while(l[poz] != lmax || ( sc(p[poz], a[poz]) == sc(a[poz], a[val]) )) poz--;
g << a[poz] << " ";
lmax--;
val = poz;
afis(poz-1);
}
}
//afisul, care afiseaza dupa pozitie

int main()
{
int i, j, x, y, poz;
f >> n;
for(i=1; i<=n; i++) f >> a[i];
l[1] = 1;
l[2] = 2;
p[1] = 0;
p[2] = a[1];
for(i=3; i<=n; i++)
{ l[i] = 1;
for(j=1; j<i; j++)
{   
x = sc(a[j], a[i]);
        y = sc(p[j], a[j]);
if(l[j]+1>l[i] && x!=y)
{ l[i] = l[j]+1;
p[i] = a[j];
if(lmax<l[i]) lmax=l[i], poz=i;
}
}
}
//afisarea
afis(poz);
f.close();
g.close();
return 0;
}

ma poate ajuta cineva cu o idee ceva la afis? nu inteleg de ce nu merge... algoritmul zic ca ii bun
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #1 : Februarie 17, 2010, 16:04:06 »

Cred ca aici e problema, la functia afisare:(ceea ce trebuie e pus in BOLD)
while((l[poz] != lmax) || ( sc(p[poz], a[poz]) == sc(a[poz], a[val]) )) poz--;
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #2 : Februarie 17, 2010, 16:05:15 »

La TopCoder nu se folosesc fisiere. Ar fi fost mult mai simplu daca ne dadeai direct clasa respectiva, ca sa putem testa in arena.
Memorat
yrar
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 17



Vezi Profilul
« Răspunde #3 : Februarie 17, 2010, 18:24:03 »

Nu fac problema sa o trimit la topcoder.. am pus ca si cum mi s-ar fi dat in fisier si fac eu niste teste..
^^ la fel, nu merge..
are altcineva vreo idee? sau o alta idee de rezolvare
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #4 : Februarie 17, 2010, 18:27:34 »

Dar ce nu merge bine?
Memorat
yrar
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 17



Vezi Profilul
« Răspunde #5 : Februarie 17, 2010, 21:10:13 »

afisul. nu afiseaza nimic
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #6 : Februarie 18, 2010, 09:16:10 »

Sigur Returnurile din programul de afisare sunt bune? Fa afisare cu o functie VOID.
Memorat
alexandru92
Nu mai tace
*****

Karma: -191
Deconectat Deconectat

Mesaje: 496



Vezi Profilul
« Răspunde #7 : Februarie 18, 2010, 15:53:14 »

Problema se poate rezolva mult mai usor decat cum ai facut-o. Retine in dif[ i ] diferetna dintre v[ i ]-v[i-1]. Restul ar trebuie sa fie evident Smile
Memorat
yrar
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 17



Vezi Profilul
« Răspunde #8 : Februarie 18, 2010, 16:45:01 »

Problema se poate rezolva mult mai usor decat cum ai facut-o. Retine in dif[ i ] diferetna dintre v[ i ]-v[i-1]. Restul ar trebuie sa fie evident Smile
da acum iese, mersi
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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