Nie rozumiem rozwiązania zadania Mecze z potyczek algorytmicznych (haszowanie)

0

Mam takie zadanie: Mecze
i znalazłem rozwiązania w internecie, (tutaj podaje przerobione tak żeby było jak najbardziej czytelne):

#include <bits/stdc++.h>

using namespace std;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    
    vector<long long> hashed (10); //taka wielkosc zebym widzial co sie dziejej w tablicy w debuggerze
    int n, m, player_id;

    cin >> n >> m;

	while(m--){
        for (int i = 0; i < n; i++){
            cin >> player_id;
			hashed[player_id-1]*=2;
			if (i<n/2)
				hashed[player_id-1]++;
		}
    }

	
	sort(hashed.begin(),hashed.begin()+n);

    for (int i = 1; i < n; i++){
        if (hashed[i-1]==hashed[i]){
			cout << "NIE\n";
			return 0;
		}
    }

	cout << "TAK\n";
	return 0;
}

No i widzę że komórke dla każdego gracza podnosimy zawsze do kwadratu, i dla graczy z pierwszej drużyny dodajemy 1. na koniec sprawdzamy czy jakiś wynik się powtórzył, tylko co to wszytsko ma na celu i dlaczego działa?

1

Dla każdego zawodnika zapisujesz hasz, w której drużynie grał w każdym meczu. Ten hasz akurat tu to taki zapis, że i-ty bit liczby determinuje czy w i-tym meczu zawodnik grał w pierwszej czy drugiej drużynie. Jeśli 2 zawodników ma takie same hasze, to w każdym meczu grali w tej samej drużynie. Z drugiej strony, jeśli hasze nie są takie same, to zawodnicy grali w którymś meczu w innych drużynach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1