infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Adrian Diaconu din Martie 25, 2007, 13:26:14



Titlul: 377 Next
Scris de: Adrian Diaconu din Martie 25, 2007, 13:26:14
Aici puteţi discuta despre problema Next (http://infoarena.ro/problema/next).


Titlul: Răspuns: 377 Next
Scris de: Bondane Cosmin din Martie 25, 2007, 20:48:29
D incape pe long long ? Mie pt numere de 14 cifre D imi devine negativ...in rest nu vad sa fi gresit la problema (operatiile le fac ca si in articol)  #-o [40+6*wa]


Titlul: Răspuns: 377 Next
Scris de: Filip Cristian Buruiana din Martie 25, 2007, 20:56:52
D incape pe long long ( long long poate retine numere de 18 cifre ).


Titlul: Răspuns: 377 Next
Scris de: Radu Zernoveanu din Martie 26, 2007, 11:52:07
nu inteleg de ce iau doar 20 de pct.
inainte citeam caracter cu caracter si luam 4 ok-uri si 6 non-zero-exit status, iar acum citesc cu string (n-ul) si dupa aceea il transform, dar iau 2 ok-uri si 8 incorect-uri
pe toate testele pe care le-am dat imi citeste bine, iar in program nu am schimbat nimic(job 36666)
imi puteti da o idee va rog asupra a ceea ce am gresit?


[later] am luat 100. multumesc oricum:)


Titlul: Răspuns: 377 Next
Scris de: Luca Eduard din Aprilie 18, 2007, 13:21:05
Eu am incercat sa retin N si D pe un unsigned long... mie pe PCul meu imi merge, dar pe infoarena imi da: 4 WA, 1 TLE si in rest Killed by signal 11. Imi puteti spune care poate fi problema?


Titlul: Răspuns: 377 Next
Scris de: Andrei Homorodean din Aprilie 18, 2007, 13:51:39
Nu cred ca e infoarena de vina :P ... citeste documentatia evaluatorului, repara killed by signal 11... si apoi mai dati niste teste, sigur ai omis ceva...

Later edit: din cate imi aduc aminte cam trebuie numere mari la prb asta, sper sa nu ma insel :)


Titlul: Răspuns: 377 Next
Scris de: Paul-Dan Baltescu din Aprilie 18, 2007, 13:58:46
Poate ai omis asta:

Citat
# 1 ≤ N < 10^1.000.000

 :roll:


Titlul: Răspuns: 377 Next
Scris de: Luca Eduard din Aprilie 18, 2007, 14:00:13
Poate ai omis asta:

Citat
# 1 ≤ N < 10^1.000.000

 :roll:

Nu, nu am omis asta. Chiar am luat-o in considerare. Stiu ca nu ar trebui sa iau 100 de pct dar nici chiar 0. Cel putin un test este cu numere mici.

[Later Edit] Am incercat sa rezolv problema si cu metoda care este publicata pe infoarena, la fel, pe PCul meu merge bine, si pe infoarena imi da 7 WA si 3 Signal 11

[Even Later Edit] Nevermind, nu am citit eu bine. Trebuia sa lucram cu operatii pe nr mari. :P


Titlul: Răspuns: 377 Next
Scris de: Andrei Misarca din Aprilie 20, 2007, 23:13:44
eu imi declar d-ul long long si la mai mult de 10 cifre devine negativ (de asta iau numai 60 de puncte) si nu inteleg de ce ](*,) pls help


Titlul: Răspuns: 377 Next
Scris de: Savin Tiberiu din Aprilie 21, 2007, 07:43:15
in borland long long == long int == 32 biti, probabil de asta pe calculatorul tau devine negativ. In ceea ce priveste evaluare de pe site, esti sigur ca ai afisat cum trebuie? dak faci cu printf tre sa pui formatul "%lld".


Titlul: Răspuns: 377 Next
Scris de: Andrei Misarca din Aprilie 21, 2007, 08:47:39
Cod:
long long d;
  scanf("%lld",&d);
asa fac citirea dar parca d-ul e de tip int(din moment ce devine negativ la mai mult de 10 cifre) desi eu l-am declarat long long. Pana acum n-am mai prea lucrat cu numere pe 64 de biti si nu prea stiu ce am omis.


Titlul: Răspuns: 377 Next
Scris de: Florian Marcu din Aprilie 21, 2007, 08:53:01
Cod:
long long d;
  scanf("%lld",&d);

Mi se pare mie sau ai declarat d-ul long long si ai citit cu "%d"? :eyebrow:


Titlul: Răspuns: 377 Next
Scris de: Codrea Marcel din Aprilie 21, 2007, 08:56:56
Cod:
long long d;
  scanf("%lld",&d);
asa fac citirea dar parca d-ul e de tip int(din moment ce devine negativ la mai mult de 10 cifre) desi eu l-am declarat long long. Pana acum n-am mai prea lucrat cu numere pe 64 de biti si nu prea stiu ce am omis.

Daca lucrezi in Borland  d-ul declarat long long este pe 32 pe biti ! De aceea, la tine devine negativ cand de fapt , in sursa trimisa , si la evaluare el se va comporta ca un numar pe 64 biti .


Titlul: Răspuns: 377 Next
Scris de: Bondane Cosmin din Aprilie 21, 2007, 10:04:04
eu imi declar d-ul long long si la mai mult de 10 cifre devine negativ (de asta iau numai 60 de puncte) si nu inteleg de ce ](*,) pls help

Ai grija la operatiile pe numere mari. Probabil acolo gresesti.


Titlul: Răspuns: 377 Next
Scris de: Andrei Misarca din Aprilie 21, 2007, 12:05:22
probabil k gresesc la operatiile pe numere mari(desi le-am facut k in articolul de pe infoarena). dar qm se face citirea numerelor long long dak folosesc scanf? adik dak %d e pt int, pt long long ce e?


Titlul: Răspuns: 377 Next
Scris de: Andrei Grigorean din Aprilie 21, 2007, 12:07:00
atat citirea, cat si afisarea :

int  - %d
long long - %lld


Titlul: Răspuns: 377 Next
Scris de: Andrei Misarca din Aprilie 21, 2007, 12:15:27
aha mz makar stiu k greseala nu e la citire


Titlul: Probleme
Scris de: florea cristian din Aprilie 25, 2007, 17:06:12
Buna...eu lucrez in pascal...imi spune si mie cineva cum citesc un numar de 1000000 de cifre? cu string nu merge decat pana la 255.....cine ma poate ajuta?

[later] cu un vector s-ar putea. dar CUM? ca nu pot citi doar cate un caracter


Titlul: Răspuns: 377 Next
Scris de: Andrei Homorodean din Aprilie 25, 2007, 17:26:18
Pai, citesti caracter cu caracter, ar trebui sa fie ok asa, e mai lent, dar merge.. Pentru operatii cu numere mari este un articol, in sectiunea de articole.

L.E.: Scuze, implementarile sunt in c, dar daca intelegi principiul poti face asa ceva si in pascal, da-mi un PM daca ai prb in a intelege..


Titlul: probleme
Scris de: florea cristian din Aprilie 25, 2007, 17:51:24
Peanutz ms pt sfat...m-am gandit si eu la asta dar problema apare acum......in fisierul.in in pascal pe o linie incap numai 255 de carcatere .....daca iei au pus in test de 1000000 de cifre...atunci mie imi apare in fisier pe mai multe linii. Si acum apare problema ca eu nu stiu cate carcatere sunt si atunci trebuie sa pun sa citeasca caracter cu caracter pana se termina fisierul. BUN, dar atunci imi citeste ci al 2 numar si nu mai am cum sa il aflu dup-aia..intelegi?
iti las un id (al unu i prieten dar sunt eu pe al acum) de mess in caz ca ma poti ajuta bogdanpopescu88

Later Edit:

Care imi poate pune si mie de ce sursa mea ia numai 90 de puncte? Eu sunt 100% sigur ca am facut foarte bine tot....la testul 2 imi da incorect

Cod:
var a,c:array[0..10000000]of byte;
    uc:integer;
    n:int64;
    i,j:longint;
    m,l,aux,aux2,rest:int64;
    s:ansistring;
    fi,fo:text;
procedure imp(k:int64);
begin
     j:=1;
     for i:=1 to m do
        begin
             aux:=aux*10+a[i];
             if aux>k then
                begin
                     c[j]:=aux div k;
                     rest:=aux mod k;
                     inc(j);
                     aux:=rest;
                end;
        end;
end;
procedure sum(k:int64);
begin
     aux2:=l;
     for i:=m downto 0 do
        begin
             aux2:=aux2+a[i];
             uc:=aux2 mod 10;
             c[i]:=uc;
             aux2:=aux2 div 10;
        end;
end;
begin
     assign(fi,'next.in'); reset(fi);
     assign(fo,'next.out'); rewrite(fo);
     a[0]:=0;
     readln(fi,s);
     for i:=1 to length(s) do
         val(s[i],a[i]);
     m:=length(s);
     readln(fi,n);
     aux:=0;
     imp(n);
     if aux=0 then
        for i:=1 to m do
             write(fo,a[i])
      else
        begin
             l:=n-aux;
             sum(l);
             if a[0]<>0 then
                write(fo,c[0]);
             for i:=1 to m do
                write(fo,c[i]);
        end;
     close(fi);
     close(fo);
end.


NEVER MIND AM LUAT 100


Titlul: Răspuns: 377 Next
Scris de: Farcasanu Alexandru Ciprian din Februarie 23, 2008, 09:52:59
Bai frate...NU inteleg, am declarat vectorii de 2.000.000  si eu tot iau KBS 11 ....ce naiba??????


Titlul: Răspuns: 377 Next
Scris de: Andrei Grigorean din Februarie 23, 2008, 12:08:43
Limita pentru aceasta problema este de 8 mega. Vad ca intr-una din surse ai declarat 2 vectori long long de 2.000.000 de elemente. Tu ai alocat aproape 32 de mega :).


Titlul: Răspuns: 377 Next
Scris de: Farcasanu Alexandru Ciprian din Februarie 23, 2008, 12:26:40
pf. eu am citit ce scria acolo la KBS 11( accesat memorie invalida) si credeam ca vectorii sunt prea mici....si ii maream de fiecare data....

Later edit: Am facut-o pana la urma dar cu mari batai de cap.... am avut 2 greseli in sursa initiala:
1. declaram vectorii aia prea mari.
2. nu stiam ca are legatura daca pun "int functie()"....sau "long long functie()".......in fine, am aflat asta de la un prieten...


Titlul: Răspuns: 377 Next
Scris de: Dragos Oprica din Ianuarie 02, 2009, 17:49:58
daca lucrezi in dev cpp nu ar trebui sa mearga bine si cu D peste 10^10?

adik eu cred k am rezolvat bine, iau 80p WA pe testele 3 si 4, iar cand verific pe calculator cu D peste 10^10 imi afiseaza dubios


Titlul: Răspuns: 377 Next
Scris de: Savin Tiberiu din Ianuarie 02, 2009, 17:59:23
in dev-cpp ca sa afisezi long long tre sa folosesti %I64d (i mare).


Titlul: Răspuns: 377 Next
Scris de: Flaviu Pepelea din Ianuarie 02, 2009, 19:08:56
merge si cu %lld


Titlul: Răspuns: 377 Next
Scris de: Savin Tiberiu din Ianuarie 02, 2009, 20:50:23
in dev-cpp eu stiam ca afiseaza dubiosenii %lld. Am impresia ca e compilatoru de mingw care face belele from time to time, stiu ca pe sgu e acelasi compilator si uneori buseste. Pe mingw din cate stiu e mai safe sa afisezi long longu cu %I64d.


Titlul: Răspuns: 377 Next
Scris de: Flaviu Pepelea din Ianuarie 02, 2009, 20:59:39
pe linux afiseaza bine cu %lld....doar pe windows face figuri :D


Titlul: Răspuns: 377 Next
Scris de: Savin Tiberiu din Ianuarie 02, 2009, 21:03:26
pe linux ai gcc/g++. Noi vorbeam de mingw, nu vad de ce ai folosi mingw pe linux.


Titlul: Răspuns: 377 Next
Scris de: Flaviu Pepelea din Ianuarie 02, 2009, 21:07:29
eu ma refeream la dev-cpp :P


Titlul: Răspuns: 377 Next
Scris de: Savin Tiberiu din Ianuarie 02, 2009, 21:09:12
pai dev-cpp foloseste mingw. Tu folosesti dev-cpp pe linux?


Titlul: Răspuns: 377 Next
Scris de: Pripoae Teodor Anton din Ianuarie 02, 2009, 23:36:24
Afiseaza cu std :: cout << X; si scapi de probleme  :)


Titlul: Răspuns: 377 Next
Scris de: Dragos Oprica din Ianuarie 03, 2009, 11:53:23
eu vorbeam de citirea lui d

am incercat si cum a zis Tiberiu, dar tot nu vrea...probabil gresesc altundeva  ](*,)


Titlul: Răspuns: 377 Next
Scris de: Pripoae Teodor Anton din Ianuarie 03, 2009, 13:22:34
pai citesti D-ul cu cin >> D;  :)


Titlul: Răspuns: 377 Next
Scris de: Dragos Oprica din Ianuarie 03, 2009, 22:05:25
pot sa il citesc cu cin>>d din fisier?  :?


Titlul: Răspuns: 377 Next
Scris de: Emanuel Cinca din Ianuarie 03, 2009, 22:52:40
Cod:
#include<fstream>

using namespace std;

int main()
{ ifstream fin("fisier.in");
  fin>>d;
}

si citesti cu fin>>d... sper ca nu am uitat ceva pe acolo ca am scris direct...


Titlul: Răspuns: 377 Next
Scris de: Dragos Oprica din Ianuarie 04, 2009, 11:34:46
multumesc.... am rezolvat pana la urma

problema nu era la citire ci uitam eu sa pun un % (modulo) :oops:


Titlul: Răspuns: 377 Next
Scris de: Sergiu-Ioan Ungur din Martie 03, 2009, 14:34:50
Folosesc un vector char[1000001] si am KBS pe al doilea test. In rest totul merge bine. Vreo idee despre ce gresesc?


Titlul: Răspuns: 377 Next
Scris de: Dragos Oprica din Martie 03, 2009, 14:39:20
Folosesc un vector char[1000001] si am KBS pe al doilea test. In rest totul merge bine. Vreo idee despre ce gresesc?

nu cred ca ar trebui neaparat sa fie de la dimesiunea prea mare a vectorului pentru ca eu am doi vectori int de 1 milion si totul merge bine
vezi sa nu faci cumva apelari aiurea

pentru numerele mari foloseste operatiile descrise aici:

http://infoarena.ro/multe-smenuri-de-programare-in-cc-si-nu-numai


Titlul: Răspuns: 377 Next
Scris de: gaboru corupt din Martie 29, 2009, 21:59:08
Hmmm... iau TLE. Si totusi nu cred ca operatiile pe care le fac dureaza mai mult de o secunda. Pur si simplu am calculat restul impartirii a lui N la D, si l-am adunat la N, si am afisat N. Desigur cu numere mari implementate ca in articol. Ce ar putea avea? Sursa: http://infoarena.ro/job_detail/292409


Titlul: Răspuns: 377 Next
Scris de: Dragos Oprica din Martie 31, 2009, 09:39:35
Hmmm... iau TLE. Si totusi nu cred ca operatiile pe care le fac dureaza mai mult de o secunda. Pur si simplu am calculat restul impartirii a lui N la D, si l-am adunat la N, si am afisat N. Desigur cu numere mari implementate ca in articol. Ce ar putea avea? Sursa: http://infoarena.ro/job_detail/292409

daca e exact cum spui tu nu ar trebui sa iei tle, ai grija sa nuti cicleze undeva sau sa gresesti operatiile pe numere mari
daca nu reusesti dami un pm, si voi incerca sa te ajut


Titlul: Răspuns: 377 Next
Scris de: Iancu David Traian din Aprilie 03, 2009, 18:08:36
Am si eu o intrebare, am trimis multe surse si mai mult de 90 de puncte nu iau.  Iau incorect pe testul 9. Imi puteti da si mie niste numere sa imi dau seama unde gresesc?

[later edit] Va rog frumos dati-mi si mie o idee ca nu stiu ce sa mai fac sa iau pe testu 2 corect, orice m-am gandit nu merge Brick wall Fighting

Editat de moderator: Nu mai posta consecutiv. Foloseste butonul "Modifica".


Titlul: Răspuns: 377 Next
Scris de: Carabet Cosmin Andrei din Aprilie 04, 2009, 22:50:29
Ma chinui de cv timp la problema asta....Iau 80 pct cu incorect pe testele 7 si 10.Ca sa gasesc rezultatul fac (n+d)-(n%d)(operatiile pe nr mari). Chestia e ca eu nu am inteles articolul cu ideea lui radu berinde pt implementarea pe nr mari si am incercat sa le fac eu(mult mai complicat si probabil mai ineficient). Se pare ca fac suma si restul bn(cel putin asa cred).In schimb la scadere cred ca gresesc undeva. Daca poate cineva sa ma lamureasca si pe mn ce-i gresit in functia asta dau o bere  :D
Cod:
void scadere()
{
long long i,j,poz,k;
for (i=1; i<=q; i++) // e clar ca (n%d) are mai putine cifre ca n+d
{
poz=i;
if (c[i]>=w[i])
c[i]=c[i]-w[i];
else
{
for (j=poz+1; j<=l_sir; j++)
if (c[j])
{
c[j]--;
for (k=j-1; k>i; k--)
c[i]=9;
break;
}
c[i]=(10+c[i])-w[i];
}
}
poz=0;
for (j=l_sir; j>=1; j--)
if (c[j]==0)
poz++;
else
break;
for (j=l_sir-poz; j>=1; j--)
printf("%d",c[j]);
}
unde c=(n+d) si w=n%d,l_sir=lungimea lui c,q= lungimea lui w

Mersi anticipat!
[editat de moderator] Foloseste tag-ul "code" cand postezi cod pe forum.

later edit: Am luat 100 in sfarsit  :yahoo: .Chestia e ca faceam: for (k=j-1; k>i; k--)
                  c=9; si nu era i, era k.greseala stupida :D


Titlul: Răspuns: 377 Next
Scris de: A Cosmina - vechi din August 05, 2009, 18:20:03
Nu stiu ce gresesc la problema asta. Calculez M=D*(N/D+1). Si iau doar 40 de puncte. Exista cazuri particulare pe care nu le trec?

Si ar mai fi ceva, voua cat va da pe urmatoarele teste:

Cod:
N=789127
D=236
Raspun= 789184

N=10
D=1
Raspuns=10

N=371
D=2
Raspuns=372

Ce am putut rata ?  ]

Edit: Thanks a lot to Dragos.  :peacefingers:


Titlul: Răspuns: 377 Next
Scris de: Simoiu Robert din Martie 20, 2010, 13:09:56
Iau 90 puncte cu WA pe testul 3. Care sa fie problema ?  :-s
[LE] Am reusit sa iau 100 pct.


Titlul: Răspuns: 377 Next
Scris de: Vlad Tarniceru din Februarie 01, 2011, 00:07:52
eu iau 40 cu KBS pe testele 5 - 10, facand M = N + (D - (N % D)) (pe numere mari)
care sa fie problema?(am verificat sa nu fie impartiri la 0, sa nu fie nr prea mare, sa intre in mem)

multumesc


Titlul: Răspuns: 377 Next
Scris de: Simoiu Robert din Februarie 01, 2011, 09:31:58
Ai facut vectorul si char-ul ( adica nr. mare ) de 1000000 cifre ( si mai mult ) ?


Titlul: Răspuns: 377 Next
Scris de: Paul-Dan Baltescu din Februarie 01, 2011, 10:08:07
In functia suma depasesti dimensiunea vectorului B.


Titlul: Răspuns: 377 Next
Scris de: Vlad Tarniceru din Februarie 01, 2011, 11:53:44
intr-adevar depaseam dimensiunea vectorului B (nu mi-am dat seama ca daca este || i-ul se va duce pana la l care e maxim 1.000.000 #-o )

mersi pentru ajutor paul :D