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....