Профессор андрей сергеевич ведет урок логики. однажды, он записал следующие выражения на доске:
ровно a1 из этих выражений верны.
ровно a2 из этих выражений верны.
ровно a3 из этих выражений верны.
ровно an из этих выражений верны.
андрей сергеевич спросил класс: сколько из этих утверждений верны? классу, найдите максимальное количество утверждений, которое может быть верно. если правильного ответа не существует, выведите -1.
входные данные
первая строка содержит число n (1 ≤ n ≤ 50) — количество утверждений. следующая строка содержит n чисел ai (0 ≤ ai ≤ n) — числа в утверждениях андрея сергеевича.
выходные данные
выведите одно число — максимальное количество верных утверждений на доске.
на языке с++ и только
100
Полагаю ответ кроется в нахождении элемента в этом списке, который и повторяется ровно столько количество раз, скольки и равен индекс данного выражения. Т.е. если у нас 5 утверждений, то утверждение с "1" будет правдиво для себя же. Если у нас будет 2 утверждения с двойками, то они могут ссылаться друг на друга соответственно.
Если будет четыре "4", то они также могут ссылаться друг на друга, что они правдивы и тогда можно заверить, что они верны.
Программа (C++):
#include <iostream>
#include <map>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int result=0;
int n, elem;
list<int> list_elems;
map<int, int> elems_map;
cout << "Введите N\n";
cin >> n;
cout << "Введите числа в утверждениях\n";
for (int i = 0; i < n; i++) {
cin >> elem;
list_elems.push_back(elem);
}
for (auto const& f : list_elems)
elems_map[f]++;
for (auto const& b : elems_map) {
if (b.first == b.second && result < b.first)
result = b.first;
}
if (result == 0)
cout << -1;
else
cout << result << " правдивы";
return 0;
}