Pagini recente » Cod sursa (job #2838897) | Concursuri organizate de infoarena | Arhiva de probleme | Cod sursa (job #3284806) | Cod sursa (job #1990914)
#include <bits/stdc++.h>
using namespace std;
int A[1000];
void printstk(stack<int> stk)
{
while (!stk.empty() ) cout << stk.top() << ' ', stk.pop();
cout << '\n';
}
#define DIM 1<<17
char buff[DIM];
int poz = 0;
void citeste(int &numar)
{
numar = 0;
//cat timp caracterul din buffer nu e cifra ignor
while (buff[poz] < '0' || buff[poz] > '9')
//daca am "golit" bufferul atunci il umplu
if (++poz == DIM)
fread(buff, 1, DIM, stdin), poz = 0;
//cat timp dau de o cifra recalculez numarul
while ('0' <= buff[poz] && buff[poz] <= '9')
{
numar = numar * 10 + buff[poz] - '0';
if (++poz == DIM)
fread(buff, 1, DIM, stdin), poz = 0;
}
}
int main()
{
freopen("elamj.in", "r", stdin);
freopen("elmaj.out", "w", stdout);
stack <int> Stk;
int N;
citeste(N);
for (int i = 1; i <= N; ++i)
citeste(A[i]);
for (int i = 1; i <= N; ++i)
{
if (Stk.empty())
Stk.push(A[i]);
else if (A[i] == Stk.top())
Stk.push(A[i]);
else
Stk.pop();
//printstk(Stk);
}
if (Stk.empty())
{
cout << -1;
return 0;
}
int cand = Stk.top();
int cnt = 0;
for (int i = 0; i < N; ++i)
if (A[i+1] == cand)
cnt++;
if (cnt > N/2)
cout << cand << ' ' << cnt;
else
cout << -1;
return 0;
}