Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8. Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include<iostream>
#include<set>
#include<vector>
#include<algorithm>
using namespace std;


int main()
{
	int n, k;
	cin >> n >> k;	// n-liczba butelek; k-liczba r�znych butelek na pocz�tku
	vector<int> a;	// ci�g reprezentuj�cy marki kolejnych butelek
	set<int> b;	// zbi�r marek butelek
	
	// wczytywanie danych:
	for(int i=0;i<n;i++) 
		{
			int x; cin >> x; 
			if(b.size()<=k)	{a.push_back(x); b.insert(x);}	//gdy ma set zgromadzimy ju� ka warto�ci, to pojawi�y si� te� one w a, ani a ani b nie powi�kszamy ju�.
		}
	//
	
	
	if (k>b.size())	cout << -1;
	else
	{
	int j = 0;
	int ans = 0;
	// idziemy po a, wi�c maksymalnie n razy.
	for(int i=0;i<n;i++)
	{	// tu robimy robot� dla ka�dego elemntu a, chyba, �e sko�czymy wcze�niej k warto�ci, to przerywamy
		// i - pozycja elementu w ci�gu a. Potrzebujemy jeszcze j, kt�e reprzentuje pozycj�, na kt�r� musimy co� wstawi�
		
		if(b.count(a[i])==1)	//je�eli marka jest w secie, to jest jeszcze nieobs�u�ona, przestawiamy j� we w�a�ciwe miejsce, aktualizujemy miejsce i usuwamy z seta
		{
			ans += (i-j);
			j++;
			b.erase(a[i]);
		}
		if(b.size()==0) break;
	}
	
	cout << ans;
	
	}
	
	return 0;
}