Cerința
Se dă un vector cu n
elemente, numere naturale, și un număr k
, divizor al lui n
. Se împarte vectorul în k
secvențe disjuncte, numerotate de la 1
la k
. Să se stabilească dacă există două secvențe identice.
Date de intrare
Programul citește de la tastatură numerele n
și k
, iar apoi n
numere naturale, reprezentând elementele vectorului.
Date de ieșire
Programul va afișa pe ecran numerele i j
, i < j
reprezentând numerele de ordine a două secvențe identice, dacă există două astfel de secvențe, sau mesajul NU
, dacă nu există două astfel de secvențe.
Dacă există mai multe perechi de secvențe identice se vor considera cele cu numerele de ordine minime.
Restricții și precizări
1 ≤ k < n ≤ 1000
,k
este divizor al luin
- cele
n
numere citite vor fi mai mici decât1000
Exemplu
Intrare
15 5 3 6 4 7 6 6 6 4 6 7 6 6 4 4 5
Ieșire
2 4
Explicație
Vectorul se împarte în 5
secvențe: (3 6 4)
, (7 6 6)
, (6 4 6)
, (7 6 6)
și (4 4 5)
, numerotate de la 1
la 5
. A doua și a patra secvență sunt identice.
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; int a[1000] , v[1000]; int k; cin >> k; int ls=n/k; int st=0 , dr=0; for(int i = 0 ; i < n ; ++i) cin >> a[i]; for(int i = 0 ; i < n ; i+=ls) { int p = 0; for(int j = i ; j < i+ls ; ++j) { v[p]=a[j]; p++; } for(int j = i+ls ; j < n ; j+=ls) { int cnt=0; p=0; for(int m = j; m < j+ls ; ++m) { if(v[p]==a[m]) cnt++; p++; } if(cnt==ls && dr==0 && st==0) st=i/ls+1 , dr=j/ls+1; } } cout << st << ' ' << dr; }