infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Adrian Diaconu din August 13, 2007, 22:15:34



Titlul: 479 Paritate
Scris de: Adrian Diaconu din August 13, 2007, 22:15:34
Aici puteţi discuta despre problema Paritate (http://infoarena.ro/problema/paritate).


Titlul: Răspuns: 479 Paritate
Scris de: Ionut Bogdanescu din August 20, 2007, 21:07:21
cred ca ar trebui aranjate un pic testele deoarece am trimis sursa de vreo 10 ori pana am lua 100 (la restul evaluarilor Incorrect pe toate testele). singura greseala era la citire unde citea mai mult :aha:, adica linia de 0 si 1 nu se termina cu "\n" (conditia de oprire din while-ul de la citire). asta e o problema pentru unii deoarece am vazut cateva surse care au luat 100 din prima. cred ca depinde de cum face fiecare citirea. ](*,)


Titlul: Răspuns: 479 Paritate
Scris de: Marius Stroe din August 20, 2007, 22:48:37
Sigur depinde de citirea fiecaruia. Cauta o citire care sa nu mai depinda atat de '\n' si altele. Poti citi tot cu fread() intr-un sir de caractere si scoate datele "manual", asa cu i ++. :)


Titlul: Răspuns: 479 Paritate
Scris de: Olariu Eduard Iuliu din Octombrie 24, 2007, 14:56:42
memset(citit,0,sizeof(citit));
   scanf("%s",citit);
   long val = strlen(citit);
   if( val  > 60001)
         while(1);

-> tle....
deci la teste sunt ceva probleme cred......
daca asa sper sa le reparati
va multumesc anticipat pentru efortul pe care il depuneti
   


Titlul: Răspuns: 479 Paritate
Scris de: Ionescu Vlad din Octombrie 24, 2007, 15:06:32
Prin 60 000 de caractere se refera la 60 000 de octeti... deci pune 60000*8.

Cam neclar intr-adevar... si '0' si '1' sunt caractere.


Titlul: Răspuns: 479 Paritate
Scris de: Bogdan-Alexandru Stoica din Octombrie 24, 2007, 17:15:49
...   scanf("%s",citit);    ...

%s mi se pare ca citeste doar 32000 de caractere. citeste cu fgets.


Titlul: Răspuns: 479 Paritate
Scris de: Adrian Diaconu din Octombrie 24, 2007, 21:06:43
Ma indoiesc ca citeste doar 32000 caractere. Eu mereu citesc cu scanf.


Titlul: Răspuns: 479 Paritate
Scris de: Bogdan-Alexandru Stoica din Octombrie 24, 2007, 21:30:22
Cod:
#include <stdio.h>
#include <string.h>

char s[66000];

int main()
{
        int i;
freopen("test.in", "w", stdout);
        for (i = 0; i < 32000; i++) printf("a");
for (i = 32000; i < 65000; i++) printf("b");
freopen("test.in", "r", stdin);
scanf("%s", s);
        i = strlen(s);
        printf("%d\n", i);
return 0;
}

i-ul este 30000, desi in fisier am 65000 de caractere.


Titlul: Răspuns: 479 Paritate
Scris de: Ionescu Vlad din Octombrie 24, 2007, 21:51:26
Interesant, daca fac urmatoarele modificari:

Cod:
#include <stdio.h>
#include <string.h>

char s[66000];

int main()
{
        int i;
    FILE *f = fopen("test.in","w");
    for (i = 0; i < 32000; i++) fprintf(f, "a");
for (i = 32000; i < 65000; i++) fprintf(f, "b");
fclose(f);
f = fopen("test.in","r");
fscanf(f, "%s", s);
        i = strlen(s);
        printf("%d\n", i);
return 0;
}

Afiseaza pe ecran 65000.

Daca nu modific nimic, in fisier am valoarea 61440 la sfarsit. Daca folosesc un watch, mi-l arata pe i ca fiind tot 61440...

Asta pe Windows cu compilator gcc. Banuiesc ca freopen e de vina...


Titlul: Răspuns: 479 Paritate
Scris de: Bogdan-Alexandru Stoica din Octombrie 24, 2007, 22:06:35
da, se pare ca ai dreptate. eu nu am prea folosit fopen pana acum. dubios gcc-ul asta... :fighting:


Titlul: Răspuns: 479 Paritate
Scris de: Adrian Diaconu din Octombrie 24, 2007, 23:05:30
Nu e nimic dubios. In momentul in care tu deschizi fisierul pentru citire mai are informatii ramase in buffer.

Foloseste fflush()

Cod:
#include <stdio.h>
#include <string.h>

char s[66000];

int main()
{
        int i;
freopen("test.in", "w", stdout);
        for (i = 0; i < 32000; i++) printf("a");
for (i = 32000; i < 65000; i++) printf("b");
        fflush(stdout);
freopen("test.in", "r", stdin);
scanf("%s", s);
        i = strlen(s);
        printf("%d\n", i);
return 0;
}


Titlul: Răspuns: 479 Paritate
Scris de: Airinei Adrian din Octombrie 25, 2007, 08:43:45
Oricum, windowsul e de vina, se intampla pe gcc sub windows sa-ti citeasca mai putine caractere cu scanf, dar nu e cazul sub linux.


Titlul: Răspuns: 479 Paritate
Scris de: Adrian Diaconu din Octombrie 25, 2007, 10:03:16
Fara fflush() de care am zis si pe linux citeste doar 61440 pentru ca nu se goleste bufferul inainte de deschiderea fisierului pentru citire.


Titlul: Răspuns: 479 Paritate
Scris de: Airinei Adrian din Octombrie 25, 2007, 10:14:44
Am postat incomplet :oops: Eu ma refeream doar la partea cu "scanf citeste doar 30000 caractere".


Titlul: Răspuns: 479 Paritate
Scris de: Vene Tian din Decembrie 21, 2007, 22:43:59
eu am gasit o rezolvare mai simpla :D nu va inteleg eu pe voi astia mari cum va complicati atata..(nu prea inteleg ce ati vrut sa comunicati mai sus dar nu conteaza  :-s)

am folosit un vector in care am memorat toti cei de '0' si '1'... problema e "Memori time limit exceeded" sau ceva de genu ...

deci maximul de 0 si 1 e 60.000*8biti (Textul transmis are cel mult 60000 caractere.)
adica 480.000 de '0' si '1' .. e un vector cam mare, nu ? :|


Titlul: Răspuns: 479 Paritate
Scris de: Gabriel Bitis din Decembrie 21, 2007, 23:09:54
prima data ia 100 de puncte.. apoi explica rezolvarea daca e mai simpla...


Titlul: Răspuns: 479 Paritate
Scris de: Vene Tian din Decembrie 21, 2007, 23:24:39
pai nam facut cine stie ce..
intrun vector am memorat toti cei '0' si '1' (vector cam mare-- ptr doar 1024kb limita de memorie...) si la evaluare primesc la toate OK .. mai putin la 4 teste (Memory limit exceded.. cu doar 40k mai mult decat limita)

acuma ma gandesc la o solutie in care sa memorez direct in vector codurile ASCII ... folosind astfel o memorie de 8 ori mai mica .. teoretic :)

noapte buna.. gandesc maine


Titlul: Răspuns: 479 Paritate
Scris de: Vene Tian din Decembrie 23, 2007, 07:42:07
prima mea metoda era mai eficienta  :-s (ca timp de executie)  dar depasea memoria pusa la dispozitie :|
http://infoarena.ro/job_detail/117687

... la cea de-a doua metoda am luat 100 puncte ... dar are cam 5 ms mai mult decat prima metoda  :indifferent:
http://infoarena.ro/job_detail/117735


Titlul: Răspuns: 479 Paritate
Scris de: Bogdan-Cristian Tataroiu din Decembrie 23, 2007, 08:44:09
Cand depasesti memoria sau timpul programul este oprit in acel moment... nu e rulat pana se termina ca ar putea sta si ani de zile unele programe...


Titlul: Răspuns: 479 Paritate
Scris de: Vene Tian din Decembrie 23, 2007, 09:33:36
ma refeream la exemplele la care am "OK!" . la alea am un timp putin mai mic decat cele de la problema pe care am luat 100pcte
da nu mare diferenta +-1ms :D


Titlul: Răspuns: 479 Paritate
Scris de: Prigoana Cristian din Ianuarie 13, 2008, 20:59:01
daca imi afiseaza corect programu, si mai exista caracterul spatiu, ii gresit? 0 puncte?


Titlul: Răspuns: 479 Paritate
Scris de: Radu Zernoveanu din Februarie 14, 2008, 17:37:17
Nu pot intelege de ce iau 6 TLE. Eu am complexitatea O(lungimea textului*2). in rest iau 4 Killed by signal si nici aici nu imi dau seama unde busesc, chiar daca folosesc liste.
http://infoarena.ro/job_detail/135825
Daca aveti o sugestie sau ceva... :'(


Titlul: Răspuns: 479 Paritate
Scris de: Alexandru Pana din Februarie 14, 2008, 18:10:40
SIGSEGV - daca folosesti liste vezi cum iti aloci memoria, sa nu citesti pe unde nu ai alocat. Sigsecv trimite programul atunci cand accesezi memorie aiurea.


Titlul: Răspuns: 479 Paritate
Scris de: Radu Zernoveanu din Februarie 14, 2008, 18:19:46
Da stiu...numai ca eu folosesc liste numai la scriere...si m-am uitat acolo si nu pare nimic gresit...voi incerca sa citesc cu fgets. Sper ca va merge... :?

[L.E.]: Acum citesc cu fgets si nu mai iau TLE, din pacate iau 4 WA...oricum ty for help :D

[L.L.E.]: Stie cumva cineva ce au mai special testele 6,7,8 si 9? ca nu reusesc sa iau OK pe ele, iau WA


Titlul: Răspuns: 479 Paritate
Scris de: Serban Andrei Stan din Februarie 14, 2008, 20:14:09
Incearca sa citesti caracter cu caracter, poate busesti ceva la citire...


Titlul: Răspuns: 479 Paritate
Scris de: Alexandru Pana din Februarie 14, 2008, 20:18:53
Poate bulesc si eu ceva la citire .. :| dupa ce am citit caracter cu caracter ( incorect pe toate testele ) am incercat fgets.

Cod:
	fgets(line,4800000,stdin);
int i=0;
while (line[i]!='\n' && line[i]!='\0')

Stiind sigur ca i e multiplu de 8 in while, isi poate da cineva seama daca de aici s-ar putea trage sigsecv ?


Titlul: Răspuns: 479 Paritate
Scris de: Serban Andrei Stan din Februarie 14, 2008, 20:20:04
Sa nu fi declarat limita prea mica la vector(sau sa-l fi facut prea mare)...ca daca te duci aiurea in momerie iei sigsegv.


Titlul: Răspuns: 479 Paritate
Scris de: Alexandru Pana din Februarie 14, 2008, 20:21:15
Se poate din cauza ca e prea mare ? M-as mira..

[L.E.] am taiat un 0 la marimea vectorilor si am scapat de sigsecv  :yahoo:. acum am incorect   :fighting:


Titlul: Răspuns: 479 Paritate
Scris de: Serban Andrei Stan din Februarie 14, 2008, 20:24:58
Da, mi s-a intamplat, eu am rezolvat problema cu un vector de 100000, de tip char. Hm...daca iei incorect cu citirea caracter cu caracter, poate bagi limita prea mare la fgets...



Titlul: Răspuns: 479 Paritate
Scris de: Alexandru Pana din Februarie 14, 2008, 21:07:33
Pot primi si eu un test oficial .. la mine merg toate testele, iar pe oficiale primesc incorect. Nu sunt sigur daca ar trebui sa ma uit la algoritm, la citire, sau la scriere :|


Titlul: Răspuns: 479 Paritate
Scris de: Florian Marcu din Februarie 14, 2008, 21:38:14
Pai vezi pe www.olimpiada.info. Am impresia ca sunt aceleasi teste ca la oji.  :thumbup:


Titlul: Răspuns: 479 Paritate
Scris de: Alexandru Pana din Februarie 14, 2008, 22:05:53
Le-am luat, multumesc .. faptul ca sunt de a 9-a si ma chinui lea ea de cateva ore imi da de gandit   :oops:

Gata, am reusit. Problema era la lungimea stringului..


Titlul: Răspuns: 479 Paritate
Scris de: Radu Zernoveanu din Februarie 15, 2008, 12:12:07
Testul 6 oficial de pe olimpiada.info are 336.520 de caractere, iar testele 7 si 9 au peste 450.000 de caractere...limita fiind de 60.000...e destul de clar de ce mie imi busea...in orice caz..nu mi se pare corect  :x

[L.E.]: in enunt 60.000 se refera la numarul de caracter din textul final, rezulta ca pot fi pana la 480.000 de caractere in fisierul de intrare. Ar fi foarte bine daca s-ar modofica enuntul astfel incat sa se inteleaga corect problema.


Titlul: Răspuns: 479 Paritate
Scris de: Alexandru Pana din Februarie 15, 2008, 13:43:40
Citat
Textul transmis are cel mult 60000 caractere.

S-a mai discutat, sunt de acord cu tine.
Prin 60 000 de caractere se refera la 60 000 de octeti... deci pune 60000*8.

Cam neclar intr-adevar... si '0' si '1' sunt caractere.


Titlul: Răspuns: 479 Paritate
Scris de: Anonim din Martie 30, 2008, 11:34:58
Aceiasi problema problema asta nu are nimik diferit de aia de la oji si am evaluat sursa mea pe evaluatoru de la oji si am luat 100 de p si aici 0 p imi spune incorect...
Cod:
#include<fstream>
using namespace std;
int main()
{int k,ok,n[10],s,y,j;
char c,b,fals[60000000];
long i,z,ultimul=0;

ifstream fin("paritate.in");
ofstream fout("paritate.out");

ok=1;j=0;z=0;
fin.get(c);

while(c!='\n')
  {s=0;
   for(i=1;i<=7;i++){fin.get(b);
     n[i]=(char)b;
     if(n[i]==49)s=s+1;

     }

    if(s%2==0) {if(c=='0')ok=1;
    else  ok=0;
}

  else { if(c=='1')ok=1;
else  ok=0;
}


    if(ok==0){fals[z]=1;
      z++;
      j=1; ultimul=z;
      }
      else{
   y=0;k=6;
   for(i=1;i<=7;i++)
     {if(n[i]==49)if(k==6)y=y+(1*(2*2*2*2*2*2));
    else if(k==5) y=y+(1*(2*2*2*2*2));
else if(k==4) y=y+(1*(2*2*2*2));
  else if(k==3) y=y+(1*(2*2*2));
else if(k==2) y=y+(1*(2*2));
       else if(k==1) y=y+(1*2);
else y=y+1;
     k--;
      }

   fals[z]=y;
   z++;
   }
    fin.get(c);
    }


     



if(j){fout<<"NU"<<'\n';
for(i=0;i<=ultimul;i++)if(fals[i]==1) fout<<i<<" ";

}
   else{fout<<"DA"<<'\n';

for(i=0;i<z;i++) fout<<fals[i];

}


fin.close();
fout.close();
return 0;
}

Editat de moderator: Nu posta de 2 ori consecutiv pe aceeasi tema. Editeaza mesajul anterior.


Titlul: Răspuns: 479 Paritate
Scris de: Bogdan-Alexandru Stoica din Martie 30, 2008, 17:05:52
Cod:
char fals[60000000];

depasesti memoria. acolo ai declarat 120MB


Titlul: Răspuns: 479 Paritate
Scris de: Anonim din Martie 30, 2008, 17:11:10
Vreau sa te intreb ceva am acolo in cerinta spune ca in fisierul de intrare exista o singura linie si se termina cu \n si eu fac citirea pana la \n si imi da time limit exces dupaia fac while(fin.get(c)) si acu nu imi mai da time limit exces dar imi zice incorect ......


Titlul: Răspuns: 479 Paritate
Scris de: Bogdan-Alexandru Stoica din Martie 30, 2008, 17:31:35
fa un debug pe exemplu sau pe un test cu input mai mare. vezi daca iti citeste corect sirul. in principiu merge ce ai spus tu. poti sa incerci si urmatorul cod:

Cod:
fin>>c;
do{
//programul tau
fin>>c;
while (c!='\n');


Titlul: Răspuns: 479 Paritate
Scris de: Anonim din Martie 30, 2008, 18:08:27
deci uitete si tu cu \n acu am schimbat ce ai zis tu si uite ce mesaje imi da

Test    Timp executie    Memorie folosita    Mesaj    Punctaj/test    Punctaj/grupa
1   20ms   368kb   Killed by signal 11(SIGSEGV).   0   0
2   24ms   368kb   Killed by signal 11(SIGSEGV).   0
3   20ms   372kb   Killed by signal 11(SIGSEGV).   0
4   24ms   376kb   Killed by signal 11(SIGSEGV).   0   0
5   24ms   372kb   Killed by signal 11(SIGSEGV).   0
6   24ms   376kb   Killed by signal 11(SIGSEGV).   0
7   24ms   364kb   Killed by signal 11(SIGSEGV).   0
8   20ms   372kb   Killed by signal 11(SIGSEGV).   0   0
9   44ms   368kb   Killed by signal 11(SIGSEGV).   0
10   20ms   376kb   Killed by signal 11(SIGSEGV).   0
Punctaj total   0

si doar sursa mea a luat 100 de puncte pe evaluatorul de la oji .. :fighting: :fighting: deja disper eu totusi cred ca testele de aici nu se termina cu '\n'

baga te rog id meu in lista ta ca sa vb  pls marius_bv21


Titlul: Răspuns: 479 Paritate
Scris de: Bogdan-Alexandru Stoica din Martie 30, 2008, 20:06:56
functia get 'sare' peste '\n'.
am tot incercat sa schimb lucruri "dubioase" din sursa ta... nu imi dau seama din ce cauza iei 'incorect', dar am o observatie:

Cod:
	   if(k==6)y=y+(1*(2*2*2*2*2*2));
    else if(k==5) y=y+(1*(2*2*2*2*2));
else if(k==4) y=y+(1*(2*2*2*2));
  else if(k==3) y=y+(1*(2*2*2));
else if(k==2) y=y+(1*(2*2));
       else if(k==1) y=y+(1*2);
else y=y+1;
poate fi rescrisa ca
Cod:
 y = y+(1<<k) 

Incearca sa rescrii sursa de la 0. eu asa fac cand nu ma prind de buguri


Titlul: Răspuns: 479 Paritate
Scris de: Anonim din Martie 31, 2008, 09:15:00
1<<k inseamana cumva 2 la puterea k ?? ? cred ca da....  dar oricum nu cred ca asta ar fi greseala :d ms pentru sfat


Titlul: Răspuns: 479 Paritate
Scris de: Bondane Cosmin din Martie 31, 2008, 10:51:43
Da.

Cod:
(1<<k) este 2^k


Titlul: Răspuns: 479 Paritate
Scris de: Pripoae Teodor Anton din Martie 31, 2008, 21:40:31
problema asta a mai fost data la ACM Varna 1992 (din intamplare am gasit-o intr-o culegere acum trei zile :D)

asta ca o simpla curiozitate


Titlul: Răspuns: 479 Paritate
Scris de: Anonim din Aprilie 03, 2008, 16:49:05
Am refacut pr si am luat numai 60 de p .. iau pe testu 5 6 7 incorect .. puteti sa imi spuneti si mie ce au diferit testele alea sau de ce ...


Titlul: Răspuns: 479 Paritate
Scris de: Bondane Cosmin din Aprilie 03, 2008, 16:52:14
Am refacut pr si am luat numai 60 de p .. iau pe testu 5 6 7 incorect .. puteti sa imi spuneti si mie ce au diferit testele alea sau de ce ...

De ce nu iti iei testele oficiale si sa verifici singur? Chiar nu cred ca cineva poate ghici ce greseala ai tu in cod.


Titlul: Răspuns: 479 Paritate
Scris de: Anonim din Aprilie 03, 2008, 16:55:42
Gata am gasit eroarea am luat 100 de p


Titlul: Răspuns: 479 Paritate
Scris de: Zajzon Barna din Decembrie 17, 2008, 16:02:33
E ceva interesant la aceasta problema: singur, am luat 30 de puncte, apoi am trimis solutia oficiala de la judeteana.. si a luat 0 puncte. Poate cineva sa ma ajute?:)


Titlul: Răspuns: 479 Paritate
Scris de: Carabet Cosmin Andrei din Iunie 25, 2009, 22:31:06
Salut.Am incercat sa fac si eu problema asta,dar iau incorect pe 4 teste.Testele sunt cele de la oji?Am incercat toate testele de la oji si imi merg.Am incercat sa fac citirea si cu fgets si caracter cu caracter,dar oricum ar fi raman incorecturile,deci nu cred ca-i de la citire.Ce ar putea fi?  :?


Titlul: Răspuns: 479 Paritate
Scris de: gaboru corupt din Iunie 25, 2009, 23:38:23
M-am uitat peste evalu' de la sursa ta. Si eu aveam aceleasi teste pe care nu mergea. Eu dupa ce citesc paritatea unei secvente de 7 biti care urmeaza si verific daca nu e '\n', iar daca e bag un break; . Prima varianta care nu a mers era ca citeam cei 8 biti dintr-o secventa si dupa o procesam (daca primu bit era '\n' imi procesa niste informatii aiurea). Bafta! :thumbup:


Titlul: Răspuns: 479 Paritate
Scris de: Carabet Cosmin Andrei din Iunie 26, 2009, 10:19:08
Poti sa fii putin mai explicit? Uite cum fac eu citirea caracter cu caracter:
Cod:
while (scanf("%c",&x)!=EOF)
{
if (r==8)
{
caractere++;
rezolva();
r=0;
}
if ((int)x>=48 && (int)x<=49)
{
v[++r]=x-'0';
continue;
}
else
continue;
}
if (r)
{
caractere++;
rezolva();
}

 Foloseste tag-ul [ code ] cand postezi cod.


Titlul: Răspuns: 479 Paritate
Scris de: gaboru corupt din Iunie 27, 2009, 10:14:32
La prima varianta (30 de pct) folosesc asa:

Cod:
while(!f.eof()) {   
          for(i = 0; i <= 7; i++)   
                f>>sir[i];
          //procesare sir

iar la varianta de 100 de pct:
Cod:
while(!f.eof()) {   
          f>>c;          //citesc paritatea
          if(c == '\n')        break; 
          for(i = 1; i <= 7; i++){   //citesc secventa de 7 biti
                f>>c;
                //procesare caracter






Titlul: Răspuns: 479 Paritate
Scris de: Pripoae Teodor Anton din Iunie 27, 2009, 10:30:53
Eu am citit tot sirul cu gets, si nu am avut probleme. Nu inteleg de ce va complicati sa cititi caracter cu caracter, merge si mai incet, si aveti si probleme dupa.


Titlul: Răspuns: 479 Paritate
Scris de: Andrei din Noiembrie 18, 2009, 12:29:52
Uhm... sursa de 100 puncte la oji, ce au astea deosebit?


Titlul: Răspuns: 479 Paritate
Scris de: Simoiu Robert din Februarie 04, 2010, 16:46:01
Citat din mesajul lui: Pripoae Teodor Anton
Eu am citit tot sirul cu gets, si nu am avut probleme. Nu inteleg de ce va complicati sa cititi caracter cu caracter, merge si mai incet, si aveti si probleme dupa.
Eu l-am citit cu citirea din c++ (standard) si nu am avut nici un fel de probleme. Deci nu are rost, in primul rand , sa cititi cu char, si mai apoi cu fgets  :)


Titlul: Răspuns: 479 Paritate
Scris de: Idomir Alin din Martie 21, 2010, 17:39:56
Am si eu o intrebare.  :-kcum sa fac sa-mi afiseze caractere? ca imi afiseaza patratele.multumesc.

L. E.: Pentru problema am folosit un vector de tip char pentru acel sir, insa nu stiu cum sal citesc sirul ca vector. Sunt mai la inceput si sper sa ma ajute cineva. :peacefingers:

L. L. E.: M-am prins cum se face citirea

Editat de admin: Nu mai posta consecutiv, editeaza-ti mesajele anterioare!


Titlul: Răspuns: 479 Paritate
Scris de: vasilica din Septembrie 16, 2010, 14:10:04
ai vrut sa spui 8 biti formeaza un byte sau un cotet...


Titlul: Răspuns: 479 Paritate
Scris de: Udrea Dragos din Martie 06, 2011, 17:36:51
ce naspa nu mere de loc am bagat si solutiile celor de la edu si da o pct  ](*,) :bomb:


Titlul: Răspuns: 479 Paritate
Scris de: Butiu Alexandru Octavian din Iulie 15, 2011, 10:57:34
Sursa mea ia Killed by signal 11(SIGSEGV) pe toate testele de la InfoArena dar pe evaluatorul de la OJI iau 100P.
Unde poate fi problema?
Cod:
#include <fstream>
using namespace std;
int pow(int a,int b);
int main()
{
    char v[9],h[60000*8];
    int poz=0,x[10000],n2=0,nr=0;
    ifstream fin("paritate.in");
    while(!fin.eof())
    {
        fin.get(v,9);
        poz++;
        int nr_1=0,p=0,aux=0;
        for(int i=7;i>0;i--)
        {
            if(v[i]=='1')
            {
                aux+=(int)pow(2,p);
                nr_1++;
            }
            p++;
        }
        if(nr_1%2==0)
        {
            if(v[0]=='0')
            {
                nr++;
                h[nr]=(char)aux;
            }
            else
            {
                n2++;
                x[n2]=poz-1;
            }
        }
        else
        {
            if(v[0]=='1')
            {
                nr++;
                h[nr]=(char)aux;
            }
            else
            {
                n2++;
                x[n2]=poz-1;
            }
        }
    }
    fin.close();
    ofstream fout("paritate.out");
    if(n2==0)
    {
        fout<<"DA"<<"\n";
        for(int i=1;i<=nr;i++)
        fout<<h[i];
    }
    else
    {
        fout<<"NU"<<"\n";
        for(int i=1;i<=n2;i++)
        fout<<x[i]<<" ";
    }
    fout.close();
    return 0;
}
int pow(int a,int b)
{
    int s=1;
    if(b==0) return 1;
    if(b==1) return 2;
    for(int i=1;i<=b;i++)
    s*=a;

    return s;
}


Titlul: Răspuns: 479 Paritate
Scris de: Pripoae Teodor Anton din Iulie 15, 2011, 17:52:30
Declari toate variabilele in main.


Titlul: Răspuns: 479 Paritate
Scris de: Lucian Maciuca din Decembrie 07, 2015, 19:12:40
Eu am incercat sa o implementez, nu mi-a iesit, eh, asta e, moving on   : :sleep:


Titlul: Răspuns: 479 Paritate
Scris de: Bucur Vlad Andrei din August 22, 2016, 00:05:28
Pe campion am luat 100, aici 0 - incorect. N-am nicio idee de ce.


Titlul: Răspuns: 479 Paritate
Scris de: Dart Monkey din August 26, 2016, 10:20:04
Si eu la fel!!  :angry: :angry: