👤

Buna, am rezolvat problema #521 kSecventa de pe pbinfo. Imi poate explica cineva logica formulelor pt. variabilele start1 si start2 din acest cod???? Nu inteleg cum s a ajuns la ele..


#include

using namespace std;

int main()
{
int n,i,j,start1,start2,k,a[1001];
cin >>n;
cin >>k;
for (i=1; i<=n;i++)
cin >>a[i];
bool eBun;
for (i=0; i {
start1=(i-1)*(n/k)+1;
cout <<"start1"<<" "< for (j=i+1; j<=k;j++)
{
start2=(j-1)*(n/k)+1;
cout <<"start2"<<" "< eBun=true;
//ne trebuie o secventa care sa extraga acelasi numar de elemente din vector si sa le grupeze in secvente distincte
for (int p=0; p if (a[start1+p]!=a[start2+p])
{
eBun=false;
break;

}
if (eBun)
{cout < return 0;
}
}
}
cout <<"NU";


return 0;
}
Multumesc!!!!


Răspuns :

Răspuns:

#include <iostream>

using namespace std;

int n,k,secvi,secvj,starti,startj,p,a[1001], i, ok;

int main()

{

   cin >> n >> k;

   for (i=1; i<=n; ++i) cin >> a[i];

   for (secvi=1; secvi<k; ++secvi)

   {

       starti=(secvi-1)*(n/k)+1;

       for (secvj=secvi+1; secvj<=k; ++secvj)

       {

           startj=(secvj-1)*(n/k)+1;

           ok=1;

           for (p=0; p<n/k; ++p )

           {

               if (a[starti+p]!=a[startj+p])

                   { ok=0; break; }

           }

           if (ok)

           {

               cout << secvi << " " << secvj;

               return 0;

           }

       }

   }

   if (ok==0) cout << "NU";

}

Explicație:

cercetează codul meu că e mai simplu, cred eu :)))

secvi e secvenţa parcursă parcă de i (e o parabolă)

secvj e secvenţa de parcă parcursă de j

starti e indicele primului număr din secvi

startj este indicele primului număr din secvj

p va parcurge valori de la 0 la n/k-1 ÅŸi astfel

starti+p sunt indicii numerelor din secvi, iar

startj+p sunt indicii numerelor din secvj

Să facem puţină mate cu formula starti=(secvi-1)*(n/k)+1;

fiecare secvenţă are n/k numere,  15/5=3 numere în secvenţă.

Dacă secvi=1, at. starti=(1-1)*(3)+1=1, adică start1 e poziţionat pe primul număr din secvenţa1, care acum se numeşte secvi

Dacă secvi=2, at. starti=(2-1)*3+1=4, adică starti este poyiţionat pe al patru-lea număr, care este primul din secvenţa a doua ....

Åži analog se fac calculele ÅŸi pentru startj

Sper să fiu înţeles....

Vă mulțumim pentru vizita pe site-ul nostru dedicat Informatică. Sperăm că informațiile oferite v-au fost de ajutor. Nu ezitați să ne contactați pentru orice întrebare sau dacă aveți nevoie de asistență suplimentară. Vă așteptăm cu drag data viitoare și nu uitați să ne adăugați la favorite!


ID Learners: Alte intrebari