#include <iostream> #include <unordered_map> #include <vector> using namespace std; int main() { int n; cin >> n; vector<int> sequence(n); unordered_map<int, int> count; for (int i = 0; i < n; ++i) { cin >> sequence[i]; count[sequence[i]]++; } // Szukamy liczby, która może być liderem int potential_leader = -1; for (const auto& kv : count) { if (kv.second > n / 2) { potential_leader = kv.first; break; } } if (potential_leader != -1) { // Jeśli istnieje lider całego ciągu, to cały ciąg jest jednym podciągiem z liderem. cout << 1 << endl; return 0; } // Jeśli nie ma lidera całego ciągu, to szukamy minimalnej liczby podciągów // Skoro lider musi zajmować więcej niż połowę ciągu, to każda liczba może być liderem maksymalnie dwóch podciągów // Minimalna liczba podciągów to więc maksymalna liczba wystąpień dowolnego elementu (zaokrąglona w górę do najbliższej parzystej liczby) // podzielona przez 2 (bo lider musi stanowić więcej niż połowę podciągu) int max_occurrences = 0; for (const auto& kv : count) { max_occurrences = max(max_occurrences, kv.second); } // Każdy element może tworzyć podciąg z liderem tylko jeśli występuje więcej niż n/2 razy. // Dlatego minimalna liczba takich podciągów to maksymalna liczba wystąpień jakiegokolwiek elementu. cout << (max_occurrences + 1) / 2 << endl; return 0; }
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 <unordered_map> #include <vector> using namespace std; int main() { int n; cin >> n; vector<int> sequence(n); unordered_map<int, int> count; for (int i = 0; i < n; ++i) { cin >> sequence[i]; count[sequence[i]]++; } // Szukamy liczby, która może być liderem int potential_leader = -1; for (const auto& kv : count) { if (kv.second > n / 2) { potential_leader = kv.first; break; } } if (potential_leader != -1) { // Jeśli istnieje lider całego ciągu, to cały ciąg jest jednym podciągiem z liderem. cout << 1 << endl; return 0; } // Jeśli nie ma lidera całego ciągu, to szukamy minimalnej liczby podciągów // Skoro lider musi zajmować więcej niż połowę ciągu, to każda liczba może być liderem maksymalnie dwóch podciągów // Minimalna liczba podciągów to więc maksymalna liczba wystąpień dowolnego elementu (zaokrąglona w górę do najbliższej parzystej liczby) // podzielona przez 2 (bo lider musi stanowić więcej niż połowę podciągu) int max_occurrences = 0; for (const auto& kv : count) { max_occurrences = max(max_occurrences, kv.second); } // Każdy element może tworzyć podciąg z liderem tylko jeśli występuje więcej niż n/2 razy. // Dlatego minimalna liczba takich podciągów to maksymalna liczba wystąpień jakiegokolwiek elementu. cout << (max_occurrences + 1) / 2 << endl; return 0; } |