infoarena

infoarena - concursuri, probleme, evaluator, articole => Informatica => Subiect creat de: Bogdan Ionut din Februarie 17, 2010, 14:21:19



Titlul: ZigZag Topcoder
Scris de: Bogdan Ionut din 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


Titlul: Răspuns: ZigZag Topcoder
Scris de: Simoiu Robert din 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--;


Titlul: Răspuns: ZigZag Topcoder
Scris de: Pripoae Teodor Anton din 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.


Titlul: Răspuns: ZigZag Topcoder
Scris de: Bogdan Ionut din 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


Titlul: Răspuns: ZigZag Topcoder
Scris de: Simoiu Robert din Februarie 17, 2010, 18:27:34
Dar ce nu merge bine?


Titlul: Răspuns: ZigZag Topcoder
Scris de: Bogdan Ionut din Februarie 17, 2010, 21:10:13
afisul. nu afiseaza nimic


Titlul: Răspuns: ZigZag Topcoder
Scris de: Simoiu Robert din Februarie 18, 2010, 09:16:10
Sigur Returnurile din programul de afisare sunt bune? Fa afisare cu o functie VOID.


Titlul: Răspuns: ZigZag Topcoder
Scris de: alexandru din 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 :)


Titlul: Răspuns: ZigZag Topcoder
Scris de: Bogdan Ionut din 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 :)
da acum iese, mersi