Afişează mesaje
|
Pagini: [1]
|
2
|
infoarena - concursuri, probleme, evaluator, articole / Articole / Răspuns: Ciurul lui Eratostene
|
: Aprilie 22, 2011, 18:41:47
|
Mie, pentru codul de mai jos in C, imi da ca 21, 25 si multe altele sunt numere prime. Am verificat de 2 ori, nu observ nimic diferit intre codul meu si cel final din articol (mai putin N-ul, eu m-am dus pana la 2000000000). Multumesc! #include <stdio.h> #include <stdbool.h>
#define N 100000000/8 + 1
static bool ciur[N];
int main(void) {
long i, j, nr = 1;
for(i = 1; ((i * i) << 1) + (i << 1) < N; ++i) if(!(ciur[i >> 3] & (1 << (i & 7)))) for(j = ((i * i) << 1) + (i << 1); (j << 1) + 1 < N; j += (i << 1) + 1) ciur[j >> 3] |= (1 << (j & 7));
for(i = 1; 2 * i + 1 < N; ++i) if(!(ciur[i >> 3] & (i << (i & 7)))) { ++nr; printf("%ld\n", 2 * i + 1); } printf("%ld\n\n", nr);
return 0; }
|
|
|
6
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Divizibilitate .campion
|
: Martie 24, 2011, 18:12:50
|
Incerc sa citesc articolul despre Divizibilitate de pe .campion, insa nu reusesc sa inteleg mare lucru. De exemplu, comentariul de la prima problema spune de X n, dar nu imi dau seama cine ar trebui sa fie. O cifra sau un numar? Iar concluzia spune "deci numerele sunt de forma 11...11c n". Din cate inteleg eu, numarul 17 ar trebui sa respecte cerinta din enunt, dar nici 17 si nici 18 nu sunt divizibile cu produsul cifrelor lor. Imi scapa mie ceva, sau articolul e chiar atat de ambigu? Am sanse sa gasesc altundeva un PDF despre divizibilitate, mai bine scris (nu ma intereseaza daca e in engleza/romana)? Multumesc!
|
|
|
11
|
infoarena - concursuri, probleme, evaluator, articole / Concursuri / Răspuns: OJI 2011
|
: Martie 19, 2011, 12:36:34
|
Nu sunt obisnuit cu MinGW, proiecte si tot asa si asta m-a costat cel mai mult. Am facut vase (a IX-a) in putin peste o ora. Dar se intamplase nu stiu ce prostie cu MinGW si nu imi afisa corect in fisierul de iesire si am crezut ca am facut-o gresit. Mi-a luat ceva sa imi dau seama ca problema nu era de la mine, si am rescris sursa de 3 ori. Daca nu am gresit ideea si nu a iesit o varza implementarea, sper sa iau maxim pe vase. Dar mi-a luat doua ore problema din cauza ca nu stiam sa folosesc MinGW ca lumea si cand am ajuns la cri, mi-am dat seama ca nu am timp sa o fac si nici nu am incercat prea tare. Sper sa iau ceva pe ea, totusi
|
|
|
14
|
infoarena - concursuri, probleme, evaluator, articole / Arhiva de probleme / Răspuns: 484 Numere 5
|
: Februarie 13, 2011, 02:12:12
|
Sursa mea pica la 3 teste. Ma poate ajuta cineva? Multumesc! #include <stdio.h>
#define IN "numere5.in" #define OUT "numere5.out" #define N 60000
char v[N + 1];
int main(void) {
long a, i, n, m;
for(i = 1; i <= N; ++i) v[i] = 0;
freopen(IN, "r", stdin); freopen(OUT, "w", stdout);
scanf("%ld", &n);
m = n * n; while(m--) { scanf("%ld", &a); if(a <= N) ++v[a]; }
for(i = 1; v[i] && i <= n * n; ++i) ; printf("%ld ", i);
for(; !v[i] && i <= n * n; ++i) ; printf("%ld", --i);
return 0; }
|
|
|
15
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: OJI 2002, a IX-a, Solutii
|
: Ianuarie 02, 2011, 03:28:59
|
Pai... stai ca ar fi mai multe probleme aici. In primul rand, backtracking la a IX-a? In al doilea rand, nu poate trece dintr-o camera intr-alta decat daca cele doua camere au un perete comun. Opt directii inseamna un colt comun. In al treilea rand, problema-ti cere sa scrii drumul dupa ce afisezi maximul. E ceva ce-mi scapa?
|
|
|
16
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: OJI 2002, a IX-a, Solutii
|
: Ianuarie 02, 2011, 00:20:51
|
Da, am folosit time pe Unix (Mac) si intra, dar ma gandeam la un test maxim, de 100x100 (in problema scrie ca cea mai mare valoare din fisier e 100), si parca n-as sta sa fac unul, desi ar fi o idee buna sa invat sa fac asa ceva. In plus, voiam sa si verific solutia. M-am gandit ca ar putea fi o varianta in care sa nu dea ca lumea, dar cand am incercat un contraexemplu nu m-am lamurit daca da gresit
|
|
|
18
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / OJI 2002, a IX-a, Solutii
|
: Ianuarie 01, 2011, 17:34:45
|
Salut, stie cineva unde as putea gasi solutiile oficiale pentru problemele de a IX-a de la OJI 2002? Am gasit pentru prima, poartas pe .campion, insa pentru a doua, mouse, nu am gasit nicaieri. Am cautat si pe olimpiada.info, dar acolo nu sunt decat subiectele si testele, iar testele pentru a doua problema mi se pare ca nu includ si ok-ul. Daca, totusi, nu se gaseste nicaieri, se poate uita cineva peste sursa de mai jos si sa imi spuna daca ar intra in timpul de 1s? PDF cu problema aici. Multumesc anticipat! #include <stdio.h>
#define N 100 + 1 #define IN "mouse.in" #define OUT "mouse.out"
int main(void) {
int cutie[N][N], poz[N][N], m, n, i, j, k, hrana = 0, cam = 0, max, sus, jos, stanga, dreapta;
freopen(IN, "r", stdin); freopen(OUT, "w", stdout);
scanf("%d %d", &m, &n);
for(i = 1; i <= m; ++i) for(j = 1; j <= n; ++j) scanf("%d", &cutie[i][j]);
i = 1; j = 1; k = 1; while(!(i == m && j == n)) {
hrana += cutie[i][j]; cutie[i][j] = 0; poz[i][j] = k++;
sus = i > 1 ? cutie[i - 1][j] : 0; jos = i < m ? cutie[i + 1][j] : 0; stanga = j > 1 ? cutie[i][j - 1] : 0; dreapta = j < n ? cutie[i][j + 1] : 0;
max = sus; if(jos > max) max = jos; if(stanga > max) max = stanga; if(dreapta > max) max = dreapta;
if(max == sus) --i; else if(max == jos) ++i; else if(max == stanga) --j; else if(max == dreapta) ++j;
++cam; } hrana += cutie[i][j]; cutie[i][j] = 0; poz[i][j] = k; ++cam;
printf("%d %d\n", cam, hrana);
for(i = 1; i <= cam; ++i) for(j = 1; j <= m; ++j) for(k = 1; k <= n; ++k) if(poz[j][k] == i) printf("%d %d\n", j, k);
return 0; }
|
|
|
21
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Răspuns: Puțin ajutor (eroare)
|
: Decembrie 24, 2010, 21:54:38
|
ia-ti un compilator mai nou, pentru ca daca iti compileaza cu void main inseamna ca e vechi. Nu... mi se pare ca da warning, dar de compilat, ar trebui sa compileze fara eroare. Code::Blocks foloseste MinGW, MinGW e un port de GCC, iar ultimul GCC da warning, nu eroare. Si ca o completare, in C main-ul e definit ca int main(void), pentru ca in C pui void ca sa arati ca functia nu ia niciun argument. In C++ nu pui nimic, dar in C, asta inseamna numar nedefinit de argumente. Acum o problema, la scanf iti trebuie ca parametru &n, nu n simplu, pentru ca tu il citesti pe n in memorie ( scanf ( "%d", &n ) ), la fel si cu celalte citiri.
Functia lucreaza cu pointeri pentru ca modifica valoarea in interiorul ei, deci are nevoie de o adresa la acea variabila, nu de o copie a valorii ei. Si inca ceva, utilizeaza <>, in loc de "" la headere, pentru ca <> reprezinta header care exista deja , iar "" inseamna ca e definit de tine, desi merge pentru cele default.
De fapt, daca il pui intre <>, header-ul e cautat in directorul in care se afla header-ele standard. Daca il pui intre "", e cautat intai in directorul specificat, iar apoi in cel pe care-l stie compilatorul. Sper ca am tinut bine minte
|
|
|
22
|
infoarena - concursuri, probleme, evaluator, articole / Informatica / Probleme, clasa a IX-a
|
: Decembrie 21, 2010, 11:52:44
|
Salut, as dori sa ma pregatesc pentru olimpiada de informatica si ma gandeam sa rezolv cat mai multe probleme de pe infoarena si .campion. Imi puteti spune cam ce as putea lucra? De pe .campion am rezolvat 32 de probleme de la grupa mica si voi continua sa lucrez, dar pe infoarena nu exista o repartizare in functie de an de studiu si e destul de descurajant sa dai peste o problema de o stea, dar care se rezolva cu un algoritm invatat intr-a XII-a.
|
|
|
23
|
infoarena - concursuri, probleme, evaluator, articole / .CAMPION / atelier
|
: Decembrie 11, 2010, 12:04:49
|
Incerc sa rezolv problema atelier din runda a treia de la .campion (grupa S) si sunt cam sigur ca am nevoie de un algoritm pentru a determina toate multimile din fisier. Daca am dreptate, e OK sa imi spuna cineva ce ar trebui sa caut pentru a invata algoritmul, sau se considera frauda? Multumesc!
|
|
|
|