Нарисуем на диаграмме, при каких x выражение ((x ∈ A) → (x ∈ P)) ∧ ((x ∈ Q) → ¬(x ∈ A)) истинно. Выражение состоит из двух условий, соединенных логическим и, так что оно будет истинным в том и только в том случае, когда оба условия истинны.
(x ∈ A) → (x ∈ P) истинно всегда, кроме случая x ∈ A, x ∉ P. На рисунке область истинности выделена синей штриховкой.
(x ∈ Q) → ¬(x ∈ A) истинно всегда, кроме случая x ∈ Q, x ∈ A. На рисунке эта область выделена зелёной штриховкой.
Формула истинна, если x принадлежит областям, выделенным обеими штриховками одновременно. Если формула верна при всех x, то области, не выделенные какой-то из штриховок, не содержат элементов, так что всё множество A состоит из элементов, которые есть в P, но которых нет в Q (эта область на рисунке помечена звёздочкой). Подходящих элементов всего 7: P \ Q = {2, 4, 8, 10, 14, 16, 20}, – так что максимальное количество элементов в A равно семи.
ответ: 7.
а)
#include <iostream>
#include <vector>
using namespace std;
bool is_any_nulls(vector<int> vec){
for(int i: vec)
if(i == 0)
return true;
return false;
}
signed main() {
int n,m;
cin >> n >> m;
vector<vector<int>> a(n);
for(int i = 0; i < n; i++){
vector<int> temp(m);
for(int &j: temp)
cin >> j;
a[i] = temp;
}
int cnt = 0;
for(vector<int> i: a)
if(!is_any_nulls(i))
cnt++;
cout << cnt;
}
б)
#include <iostream>
#include <vector>
#include <map>
using namespace std;
signed main() {
int n, m;
cin >> n >> m;
map<int,int> mp;
vector<vector<int>> a(n);
for (int i = 0; i < n; i++) {
vector<int> temp(m);
for (int &j: temp){
cin >> j;
mp[j]++;
}
a[i] = temp;
}
int mx = -INT_MAX;
for(auto i: mp)
if(i.first > mx && i.second > 1)
mx = i.first;
cout << mx;
}