Pagini: 1 2 3 [4] 5 6 7   În jos
  Imprimă  
Ajutor Subiect: 484 Numere 5  (Citit de 36058 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
ucc_5
Client obisnuit
**

Karma: -11
Deconectat Deconectat

Mesaje: 82



Vezi Profilul
« Răspunde #75 : Aprilie 21, 2009, 22:34:04 »

Va rog sa mariti limita la 660 Kb, sau daca nu sa imi spuneti ce e gresit in sursa mea de are 3 MLE-uri:
Cod:
#include <fstream.h>   
#define min(a,b) a<b?a:b   
 
ifstream f("numere5.in");   
ofstream g("numere5.out");   
 
int n;   
char v[500001];   
long limita;   
 
void citire ()   
{ long aux;   
 f>>n;   
 limita=min(n*n,500000);   
  for (short int i=1; i<=n; i++)   
   for (short int j=1; j<=n; j++)   
    { f>>aux; if (aux<=limita) v[aux]=1; }   
  f.close ();   
}   
 
int main ()   
{ citire ();     
  long i=1;   
  while (v[i]) i++;   
  g<<i<<" ";   
  i=limita;   
   
while (v[i]) i--;   
  g<<i;   
  g.close ();   
  return 0;   


[editat de moderator] foloseste tagul code cand postezi cod sursa.
« Ultima modificare: Aprilie 21, 2009, 22:45:33 de către Savin Tiberiu » Memorat
klamathix
Echipa infoarena
Nu mai tace
*****

Karma: 733
Deconectat Deconectat

Mesaje: 1.216



Vezi Profilul
« Răspunde #76 : Aprilie 22, 2009, 07:18:38 »

Pai in mod evident foloseste prea multa memorie  Smile

Uita-te prin restul topicului . Poti gasi multe solutii la aceasta problema  si chiar una care ruleaza in O(1) memorie   Weightlift
Memorat
andrici_cezar
De-al casei
***

Karma: -47
Deconectat Deconectat

Mesaje: 121



Vezi Profilul
« Răspunde #77 : Aprilie 22, 2009, 18:34:27 »

Va rog sa mariti limita la 660 Kb, sau daca nu sa imi spuneti ce e gresit in sursa mea de are 3 MLE-uri:
Cod:
#include <fstream.h>   
#define min(a,b) a<b?a:b   
 
ifstream f("numere5.in");   
ofstream g("numere5.out");   
 
int n;   
char v[500001];   
long limita;   
 
void citire ()   
{ long aux;   
 f>>n;   
 limita=min(n*n,500000);   
  for (short int i=1; i<=n; i++)   
   for (short int j=1; j<=n; j++)   
    { f>>aux; if (aux<=limita) v[aux]=1; }   
  f.close ();   
}   
 
int main ()   
{ citire ();     
  long i=1;   
  while (v[i]) i++;   
  g<<i<<" ";   
  i=limita;   
   
while (v[i]) i--;   
  g<<i;   
  g.close ();   
  return 0;   


[editat de moderator] foloseste tagul code cand postezi cod sursa.

Tu cred ca nu ai observat ca scrie ca sunt cifre consecutive
Acest lucru te avantajeaza.
Gandestete ca ai sirul
1 0 0 0 5 6 7 8 9

Suma cifrelor prezente este 36
Sunt 3 numere absente
Suma sirului este 45

Pentru exemplu
Cod:
a=suma_sirului - suma_cifrelor_prezente; //a=9
b=numarul_de_cifre_absente; //b=3
x=(a-(b*b+b)/2)/b; //x=1
pozitie_inceput=x+1; // pi=2
pozitie_final=x+b; //pf=4

Very Happy
sper sa iti foloseasca
Memorat
codrin
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 11



Vezi Profilul
« Răspunde #78 : Aprilie 28, 2009, 19:53:23 »

 Brick wall Brick wall Brick wall pffffffff
deci am facut-o in doua moduri...

1. cu vector de 500.000 imi iese la 3 teste din memorie desi pe forum zice lumea ca le-a intrat:

Cod:
#include<fstream.h>

char a[500005];

int main()
{
 ifstream fin("numere5.in");
 ofstream fout("numere5.out");
 long i,n,aux,auxi;
 fin>>n;
 aux=n*n;
 if(aux>500000)
aux=500000;
 for(i=1;i<=aux;i++)
{
fin>>auxi;
if(auxi)
a[auxi]=1;
}
 for(i=1;i<=aux;i++)
if(a[i]==0)
{
fout<<i<<" ";
break;
}
 for(i=aux;i>=1;i--)
if(a[i]==0)
{
fout<<i<<"\n";
break;
}
return 0;
}

2. cu sume si iau incorect pe 4 teste si cu formula chiar cea de mai sus pentru capetele de interval

Cod:
#include<fstream.h>

int main()
{
 ifstream fin("numere5.in");
 ofstream fout("numere5.out");
 long i,n,aux,auxi,suma=0,sumb=0,a,b=0,x;
 fin>>n;
 aux=n*n;

 if(aux>500000)
aux=500000;

 for(i=1;i<=aux;i++)
{
suma+=i;
fin>>auxi;
if(auxi)
sumb+=auxi;
else
b++;
}

 a=suma-sumb;
 x=(a-(b*b+b)/2)/b;

 fout<<x+1<<" "<<x+b;

 fin.close();
 fout.close();

return 0;
}

deci pe bune nu stiu care e greseala in niciuna dintre ele dar ma frustreaza 0-ul  Fighting Fighting Fighting
Memorat
andrici_cezar
De-al casei
***

Karma: -47
Deconectat Deconectat

Mesaje: 121



Vezi Profilul
« Răspunde #79 : Aprilie 29, 2009, 08:19:32 »

Pai la varianta a doua vezi ca tu trebuie sa stii cate numere nu sunt, si suma celor care sunt si inca ceva suma aia care creste cu i este egala cu suma=(n*n*n*n+n*n)/2  .. Si apoi faci ce ti-am zis:D  Smile

Ai incercat sa pui 500001?
« Ultima modificare: Aprilie 29, 2009, 08:25:24 de către Andrici Cezar » Memorat
codrin
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 11



Vezi Profilul
« Răspunde #80 : Aprilie 29, 2009, 18:41:17 »

nu inteleg ce vrei sa spui...ce nu e corect mai exact la varianta a doua??
suma=suma numerelor de la 1 la n(da ma rog are si formula n(n+1)/2 dar nu e asta marea problema)
sumb=suma numerelor care sunt
b=cate nu sunt
a=suma celor care nu sunt

ce imi mai trebuie in afara astora?
Memorat
andrici_cezar
De-al casei
***

Karma: -47
Deconectat Deconectat

Mesaje: 121



Vezi Profilul
« Răspunde #81 : Aprilie 29, 2009, 19:05:43 »

vezi ca 50000*500000 depaseste long trebuie sa pui long long  Ok scz la inceput eram cam somnoros  Embarassed am testat sursa ta cu long long si ia 100;) noroc in continuare
Memorat
codrin
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 11



Vezi Profilul
« Răspunde #82 : Aprilie 29, 2009, 19:11:49 »

pfff...corect...uitasem de asta Brick wall Brick wall Thumb down Thumb down
ms fain  peacefingers
Memorat
zloteanu.adrian
Strain
*

Karma: -9
Deconectat Deconectat

Mesaje: 38



Vezi Profilul
« Răspunde #83 : Mai 01, 2009, 13:01:10 »

http://infoarena.ro/job_detail/309913
chiar am nevoie de ajutor
am lucrat 5 ore azi la ea si tot nu functioneaza Brick wall Brick wall Brick wall Brick wall Brick wall
Memorat
Robytzza
De-al casei
***

Karma: -49
Deconectat Deconectat

Mesaje: 129



Vezi Profilul
« Răspunde #84 : Mai 01, 2009, 13:07:18 »

nu e open source, deci nu pot sa vad cum ai facut, poti incerca sa lucrezi pe biti, sau sa incerci cu hasuri, ma gandesc ca intra in memorie asa
Memorat
zloteanu.adrian
Strain
*

Karma: -9
Deconectat Deconectat

Mesaje: 38



Vezi Profilul
« Răspunde #85 : Mai 01, 2009, 15:15:34 »

nu siu ce inseamna sa lucrezi pe biti Cry Cry Cry
oricum,uite sursa
Memorat
Flloryn
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« Răspunde #86 : Mai 11, 2009, 17:17:31 »

Buna! Va rog sa ma ajutati si pe mine! Lucrez la problema asta de ceva vreme. Am facut un cod simplu dar nu imi dau seama de ce primesc 4 TLE pe ultimele teste cand practic eu fac doar un for pana la n*n. Lucrez in pascal. Iata codul:

         
Cod:
# program pascal;  
#   var f,g:text; n,x,nr,s,nr2,dif,p,sl:int64; j,i:longint; 
#   begin 
#   assign(f,'numere5.in'); reset(f); 
#   assign(g,'numere5.out'); rewrite(g); 
#   readln(f,n); 
#   sl:=0;  nr:=0; 
#   for i:=1 to n*n do 
#            begin 
#            read(f,x); 
#            if x=0 then nr:=nr+1; 
#            sl:=sl+x; 
#            end; 
# n:=n*n; 
# s:=(n*(n+1)) div 2; 
# dif:=s-sl; 
# nr2:=nr-1; 
# p:=nr2*(nr2+1) div 2; 
# dif:=dif-p; 
# i:=dif div nr; 
# j:=i+nr2; 
# write(g,i,' ',j); 
# close(f); 
# close(g); 
# end. 

HELP ME, PLEASE!!!!  Very Happy Smile
Memorat
andrici_cezar
De-al casei
***

Karma: -47
Deconectat Deconectat

Mesaje: 121



Vezi Profilul
« Răspunde #87 : Mai 11, 2009, 17:18:50 »

vezi daca n*n>500000 sa reintializezi n*n cu 500000 Wink si asa ar trebui sa iti mearga
Memorat
Flloryn
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 5



Vezi Profilul
« Răspunde #88 : Mai 11, 2009, 17:25:24 »

multumesc mult cezar! foarte repede ai raspuns! am luat in sfarsit 100 Winner 1st place  iti multumesc tare mult!
Memorat
bacerandrei
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #89 : Mai 16, 2009, 08:31:07 »

Am si eu o nedumerire. Deci eu fac in felul urmator: calculez suma primelor n*n numere cu formula n*n*(n*n+1)/2, apoi in timp ce citesc numerele le fac suma si aflu cate din ele sunt egale cu 0. Aflu prin diferenta suma numerelor lipsa (sa zicem dif). Stiind ca acestea sunt consecutive ele vor avea forma a , a+1, a+2, ... , a+nr-1 (unde nr reprezinta numarul valorilor egale cu 0). Asadar primul numar va fi egal cu [dif-(nr*(nr-1)/2)]/nr, iar ultimul egal cu primul+nr-1. Cu toate acestea...pe 9 teste obtin mesajul incorrect. Imi poate spune va rog cineva ce este gresit in rationamentul meu?  Brick wall
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #90 : Mai 16, 2009, 08:48:54 »

Iti trebuie long long.
Memorat
bacerandrei
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #91 : Mai 16, 2009, 09:03:33 »

Cu exceptia lui n toate variabilele ce intervin in programul meu sunt declarate long long Rolling Eyes
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #92 : Mai 16, 2009, 09:33:53 »

Trebuie sa faci cast la long long, daca ai sa zicem s long long si n int, si vrei sa faci s = n * n * (n -1), trebuie s = 1LL * n * n * (n -1).
Memorat
bacerandrei
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 10



Vezi Profilul
« Răspunde #93 : Mai 16, 2009, 09:51:07 »

Mii de multumiri Toni am reusit sa iau 100 Yahoo!

O informatie foarte utila pe viitor Aha
Memorat
dornescuvlad
Nu mai tace
*****

Karma: -138
Deconectat Deconectat

Mesaje: 234



Vezi Profilul
« Răspunde #94 : Decembrie 17, 2009, 12:37:50 »

Cod:
#include<iostream>
#include<fstream>

using namespace std;

ifstream f("numere5.in");
ofstream g("numere5.out");

int n;
char v[500001];
long int x,i,m;

int main()

{  

f>>n;

if(n*n>500000)
m=500000;
else
m=n*n;

    for(i=1;i<=m;i++)
{
f>>x;
   v[x]=1;
}


    for(i=1;i<=m;i++)
{
        if(v[i]==0 && v[i-1]==1)
   g<<i<<" ";
if(v[i]==0 && v[i+1]==1)
   g<<i;
}
return 0;
}

un WA pe testul 9, si 4 MLE. Imi spuneti si mie ce e gresit va rog?Sad


Folosesti prea multa memorie. Incearca fara vector.  Smile

pai cum se face fara vector? la comentarii scriau toti ca au facut cu vector

[editat de moderator] ai postat consecutiv...
« Ultima modificare: Decembrie 17, 2009, 14:19:46 de către Sima Cotizo » Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #95 : Decembrie 17, 2009, 12:39:13 »

Poti face si cu vector. Am gresit eu. Uite, aici:
Citat
   for(i=1;i<=m;i++)
   {
      f>>x;
       v
  • =1;
   }
x poate fi mai mare de 500.000. Pune conditie!  Smile Mai citeste o data formatul datelor de intrare.
Memorat
dornescuvlad
Nu mai tace
*****

Karma: -138
Deconectat Deconectat

Mesaje: 234



Vezi Profilul
« Răspunde #96 : Decembrie 17, 2009, 12:43:03 »

nu inteleg, de ce iau Memory Limit Exceeded, ce gresesc?
am dat m=n*n si iau killed by signal 11 pe unul, pe restul mle
am pus long long la toate si iau mle


int n;
char v[500001];
long long m;
long int i,x;


//nu va mai deranjati sa raspundeti ca am aflat greseala/greselile
« Ultima modificare: Decembrie 17, 2009, 17:38:07 de către Dornescu Vlad-Eugen » Memorat
lsorin_94
Strain


Karma: -8
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #97 : Martie 02, 2010, 17:47:52 »

shirul de nr incepe de la 1.. ?
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #98 : Martie 02, 2010, 17:50:19 »

Da, de la 1 la N*N
Memorat
lsorin_94
Strain


Karma: -8
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #99 : Martie 02, 2010, 19:54:55 »

poate sa imi spuna cineva de ce nu primesc mai multe puncte??
Cod:
program num5;
const r=1;
type vec=array [1..1000000] of word;
var i,n:longint;
    st,s0,s,sfi:longint;
    k:integer;
    a1,an:longint;
    a:vec;
    f,t:text;
begin
  assign(f,'numere5.in');
  reset(f);
  assign(t,'numere5.out');
  rewrite(t);
  read(f,n);
  n:=n*n;
  for i:=1 to n do
    read(f,a[i]);
  {-----------------------}
  k:=0;s:=0;
  for i:=1 to n do
    if a[i]=0 then k:=k+1
      else S:=s+a[i];
  a1:=1;
  an:=n;
  st:=((n+1)*n) div 2;
  S0:=St-S;
  sfi:=S0*2 div k;
  a1:=(sfi-(k-1)) div 2;
  an:=a1+(k-1);
  {-----------------------}
  write(t,a1,' ',an);
  close(f);
  close(t);
end.
Memorat
Pagini: 1 2 3 [4] 5 6 7   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines