Afişează mesaje
|
|
Pagini: [1]
|
|
7
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / ZigZag Topcoder
|
: 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. #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
|
|
|
|
|
11
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / explicare cod
|
: Octombrie 04, 2009, 12:39:23
|
Imi poate explica cineva pe rand secventele din while? #include<iostream> #include<string.h> #include<conio.h> using namespace std; char S[250], s2[250], s[250], s1[250]; int u, i, p; int main() { cin.getline(s,100); cin.getline(s1,100); cin.getline(s2,100); do { char * pt=strstr(s, s1); if(!pt) { for(i=u;i<strlen(s);i++) strncat(S,s+i,1); break; } p=pt-s; for(i=u;i<p;i++) S[i]=s[i]; for(i=p;i<p+strlen(s1);i++) s[i]='!'; for(i=p;i<p+strlen(s2);i++) strncat(S,s2+i-p,1); u=p+strlen(s1); } while(1); cout<<S; getch(); return 0; } l-am scris ordonat sa se inteleaga. de exemplu la strncat(S,s+i,1); copie pe rand cate-un caracter din s in S sau cum?
|
|
|
|
|
12
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 003 Fractii
|
: Octombrie 01, 2009, 18:23:34
|
long N,i,x,nr; long eratostene() { long nr; nr=N; for(x=2; x*i<N; x++) nr--; return nr; }
si eu sunt la inceput, sper sa nu gresesc ce zic dar: ai declarat i global, si in for ai conditia x*i<N ... care ii mereu adevarata daca N>0 nu stiu cum iti iese pe numere mici. zic eu ca mai intai ar trebui sa inveti baza (notiuni elementare) si pe urma sa treci la probleme.
|
|
|
|
|
14
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 003 Fractii
|
: Septembrie 30, 2009, 13:33:05
|
|
ah, scuze. credeam ca fara ++d, acum am vazut ca l-ai pus in afara ifului. asa merge dar nu da pentru toate, merge pe 3,4 si inca, cateva mici, dar pe altele da prost. de ex pentru 31, imi da 647... ii ceva in neregula cu functia ? si la un milion imi iese din timp ...
|
|
|
|
|
16
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 003 Fractii
|
: Septembrie 29, 2009, 20:15:18
|
Am si eu o intrebare referitor la o sursa, inca nu am trimis-o dar o probez pe niste exemple si nu imi da bine. nu prea stiu regulile, daca pot sau nu sa postez o sursa ... am folosit indicatorul lui euler, o functie numita fi: while(n>1) if(n%d==0) { pr=pr*((d-1)/d); while(n%d==0) n/=d; } else d++;
si returneaza pr, pr ii initializat cu N. si in int main() am: v[1]=1; for(i=2;i<=n;i++) v[i]=v[i-1]+2*fi(i);
si afisez v[n]. ce nu este corect? solutia nu este in v[n] ?
|
|
|
|
|