Pagini recente » Cod sursa (job #2915605) | Cod sursa (job #1129905) | Cod sursa (job #3187342) | Cod sursa (job #232982) | Cod sursa (job #3233233)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
pair<int, int> findMajorityElement(const vector<int>& nums) {
int candidate = 0;
int count = 0;
// Faza 1: Găsim candidatul majoritar folosind algoritmul Boyer-Moore
for (int num : nums) {
if (count == 0) {
candidate = num;
count = 1;
} else if (num == candidate) {
count++;
} else {
count--;
}
}
// Faza 2: Verificăm dacă candidatul este cu adevărat majoritar
count = 0;
for (int num : nums) {
if (num == candidate) {
count++;
}
}
if (count > nums.size() / 2) {
return {candidate, count};
} else {
return {-1, -1};
}
}
int main() {
ifstream infile("elmaj.in");
ofstream outfile("elmaj.out");
if (!infile || !outfile) {
cerr << "Error opening file" << endl;
return 1;
}
int n;
infile >> n;
vector<int> nums(n);
for (int i = 0; i < n; ++i) {
infile >> nums[i];
}
pair<int, int> result = findMajorityElement(nums);
if (result.first != -1) {
outfile << result.first << " " << result.second << endl;
} else {
outfile << -1 << endl;
}
infile.close();
outfile.close();
return 0;
}