Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: 1097 Difprim  (Citit de 6696 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« : Decembrie 13, 2010, 00:42:55 »

Aici puteti discuta despre problema Difprim.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #1 : Decembrie 20, 2010, 17:33:08 »

Cum se aloca memoria pentru 100p? Daca folosesc un vector de 10 000 000 elemente iau decat 60 din cauza memoriei.
Memorat
toni2007
Nu mai tace
*****

Karma: 160
Deconectat Deconectat

Mesaje: 663



Vezi Profilul
« Răspunde #2 : Decembrie 20, 2010, 18:00:15 »

Cod:
#include <bitset>

bitset < 10000000> ciur;
Memorat
SpiderMan
Nu mai tace
*****

Karma: -463
Deconectat Deconectat

Mesaje: 937



Vezi Profilul
« Răspunde #3 : Decembrie 20, 2010, 18:00:28 »

Ai doua variante : fie folosesti un bitset, fie faci ciurul optimizat pe biti.
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #4 : Decembrie 22, 2010, 02:04:16 »

Cum se aloca memoria pentru 100p? Daca folosesc un vector de 10 000 000 elemente iau decat 60 din cauza memoriei.

Poti declara 10 milioane de bool, nu de int.
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
freak93
Echipa infoarena
Nu mai tace
*****

Karma: 342
Deconectat Deconectat

Mesaje: 819



Vezi Profilul
« Răspunde #5 : Decembrie 22, 2010, 12:30:39 »

Bool nu prea e folositor ca tip de date, consuma 1 byte pentru a mentine 2 valori(true and false). Desi in conditiile de fata intra in memorie la unele probleme s-ar putea sa nu intre.
Memorat
vladtarniceru
De-al casei
***

Karma: 81
Deconectat Deconectat

Mesaje: 145



Vezi Profilul
« Răspunde #6 : Decembrie 30, 2010, 14:11:11 »

am nevoie de putin ajutor, am 2 surse aproape identice, una de 100 si alta de 60 si chiar nu vad care e diferenta
sursa de 100:
Cod:
# include <fstream>
  using namespace std;
    int A, B, st, dr, p1, p2, sol;
char a[(10000000 >> 3) + 100000];
    int main (){
ifstream f ("difprim.in");
ofstream g ("difprim.out");
f >> A >> B;
int i = 4;
for (i = 4; i <= 10000000; i += 2)
a[i >> 3] |= (1 << (i & 7) );
i = 1;
while (i <= 400000){
do{
i += 2;
}while (     ( a[i >> 3] & (1 << (i & 7) ) )      );
for (int j = i + i; j <= 10000000; j += i)
a[j >> 3] |= (1 << (j & 7) );
}
//for (i = 1; i <= 30; ++i)
// if (    !( a[i >> 3] & (1 << (i & 7) ) )      )
// g << i << ' ';
for (i = A + 1; i < B; ++i){
if (  !(   a[i >> 3] & (1 << (i & 7) )   )  ){
st = dr;
dr = i;
if (sol < dr - st && st){
sol = dr - st;
p1 = st;
p2 = dr;
}
}
}
if (!sol) g << "-1\n";
else
g << p1 << ' ' << p2 << '\n';
g.close ();
return 0;
}
si cea de 60:
Cod:
# include <fstream>
  using namespace std;
    std :: ifstream f ("difprim.in");
std :: ofstream g ("difprim.out");
char a[(10000000 >> 3) + 10000];
int A, B;
void ciur (){
for (int i = 4; i <= 10000000; i += 2)
a[i >> 3] |= (1 << (i & 7) );
int i = 1;
while (i <= 100000){
do {
i += 2;
} while (a[i >> 3] & (1 << (i & 7) ));
for (int j = i + i, val = (i << 1); j <= 10000000; j += i) a[j >> 3] |= (1 << (j & 7) );
}
}
int af1, af2, MAX = 0;
int main (){
f >> A >> B;
ciur ();
int ac, an;
for (int i = A + 1; i < B; ++i){
if ( !(a[i >> 3] & (1 << (i & 7) ) ) ){
an = ac, ac = i;
    if (MAX < ac - an && an){
   MAX = ac - an;
af1 = an;
af2 = ac;
}
}
}
if (!MAX) g << "-1\n";
else
g << af1 << ' ' << af2 << '\n';
return 0;
}
as fi recunoscator celui care mi-ar zice ce e gresit in cea de-a doua
multumesc  Smile
Memorat
Oancea.Catalin
Client obisnuit
**

Karma: -3
Deconectat Deconectat

Mesaje: 75



Vezi Profilul
« Răspunde #7 : Februarie 08, 2011, 11:16:58 »

cum stiu cata memorie ocupa un vector? de exemplu int a[100] ... are legatura daca e declarat int sau long?
Memorat
nparfene2004
Client obisnuit
**

Karma: 22
Deconectat Deconectat

Mesaje: 81



Vezi Profilul
« Răspunde #8 : Februarie 08, 2011, 11:32:01 »

Utilizezi operatorul sizeof:

Cod:
#include<iostream>

using namespace std ;

int main()
{
int a[10000] ;

cout << sizeof(a) ;

return 0 ;
}
Memorat
Oancea.Catalin
Client obisnuit
**

Karma: -3
Deconectat Deconectat

Mesaje: 75



Vezi Profilul
« Răspunde #9 : Februarie 08, 2011, 21:14:54 »

si sizeof(a)... e dat in  kbytes ?  Huh
Memorat
R.A.R
Strain
*

Karma: -7
Deconectat Deconectat

Mesaje: 37



Vezi Profilul
« Răspunde #10 : Februarie 08, 2011, 22:53:18 »

Nu : Returns the total size, in bytes, of the input variable.
Memorat
soriyn
Vorbaret
****

Karma: 24
Deconectat Deconectat

Mesaje: 150



Vezi Profilul
« Răspunde #11 : Martie 17, 2011, 02:00:03 »

i-a intrat cuiva in timp,pe toate testele, fara ciur pe biti ?
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #12 : Martie 17, 2011, 12:47:22 »

Nu trebuie pe biti. Trebuie sa-l optimizezi putin. Vezi Aici
Memorat
dutzul
De-al casei
***

Karma: 42
Deconectat Deconectat

Mesaje: 119



Vezi Profilul
« Răspunde #13 : Ianuarie 18, 2012, 16:21:21 »

pff nu mai stiu ce sa optimizez pe el imi ia TLE pe ultimu test.. am facut ciur cu niste optimizari(j=i*i),i*i<=b; mda si cam asta e  Brick wall
Memorat
informatician28
Strain
*

Karma: 6
Deconectat Deconectat

Mesaje: 27



Vezi Profilul
« Răspunde #14 : Mai 09, 2012, 09:42:51 »

Nu inteleg ce e incorect pe testul 7?

Multumesc!
Memorat
darkseeker
De-al casei
***

Karma: 29
Deconectat Deconectat

Mesaje: 106



Vezi Profilul
« Răspunde #15 : Mai 09, 2012, 12:36:53 »

Ai afisat -1 in cazul in care nu ai solutie ?
Memorat
Johny_Depp22
Strain
*

Karma: 3
Deconectat Deconectat

Mesaje: 25



Vezi Profilul
« Răspunde #16 : Aprilie 14, 2013, 17:56:15 »

ce e cu testul 6? Iau incorect pe el si nu stiu de ce. am luat in considerare si cazul in care nu exista solutie si tot 90p iau. vreo idee?
Memorat
Steve
Client obisnuit
**

Karma: 36
Deconectat Deconectat

Mesaje: 72



Vezi Profilul
« Răspunde #17 : Aprilie 14, 2013, 19:16:12 »

Cod:
if (i-prec>dif && prec >= A)

..tu gasesti doua prime, din care unu poate sa fie mai mic decat A in forul ala si zici la sfarsit ca daca perechea pe care ai gasit-o e mai mica decat a n-ai solutie, ceea ce e gresit. Ex, ai a = 11, b = 13...o sa iti dea -1, chiar daca ai solutie..
Memorat
Johny_Depp22
Strain
*

Karma: 3
Deconectat Deconectat

Mesaje: 25



Vezi Profilul
« Răspunde #18 : Aprilie 14, 2013, 20:58:43 »

mersi mult!  Ok. acum am luat 100p  Winner 1st place .O sa fiu mai atent de acum  Embarassed
Memorat
otniel
Strain
*

Karma: -13
Deconectat Deconectat

Mesaje: 49



Vezi Profilul
« Răspunde #19 : Ianuarie 31, 2015, 20:54:17 »

ce este gresit la sursa asta ca da incorect pe testu 1

#include<iostream>
using namespace std;
#include<stdio.h>
#include<math.h>
int i,j,a,b,maxim,u,q,w,t,nr;
bool c[10000000];
FILE *f,*g;
int main()
{
     f=fopen("difprim.in","r");
    g=fopen("difprim.out","w");
     fscanf(f,"%d %d",&a,&b);
  for (i = 3; i <= sqrt(b); i += 2) {
    if (c == 0) {
      for (j = i+i+i; j <= b; j += i << 1) {
        c[j] = 1;
      }
    }
  }
    if(a%2==0)
        a++;
    for(i=a;i<=b;i=i+2)
        if(!c)
        {u=i;
    break;}
      for(i=u+2;i<=b;i=i+2)
        if(c==0)
      {
          if(i-u>maxim)
          {
              maxim=i-u;
              q=u;
              w=i;
          }
          u=i;
      }
      if(q!=w&&q!=0&&w!=0)
      fprintf(g,"%d %d",q,w);
      else
        fprintf(g,"-1");
}
Memorat
RG1999
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #20 : Ianuarie 04, 2016, 21:51:18 »

Algoritmul tau nu l ia in considerare pe 2. Aceeasi greseala am avut o si eu
Memorat
RG1999
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #21 : Ianuarie 04, 2016, 21:51:37 »

Algoritmul tau nu l ia in considerare pe 2. Aceeasi greseala am avut o si eu
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

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