#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
typedef long long ll;
int n, m, k;
const int P = 1000000007;
int reg(int x, int y, int mx, int Mx, int my, int My)
{
if (x >= mx && x < Mx && y >= my && y < My)
return 3;
if (x >= mx && x < Mx && y < my)
return 5;
if (x >= mx && x < Mx && y >= My)
return 5;
if (x < mx && y >= my && y < My)
return 7;
if (x >= Mx && y >= my && y < My)
return 7;
return 11;
}
int main()
{
ios_base::sync_with_stdio(0);
cin >> k >> m >> n;
vector<int> mx(k), Mx(k), my(k), My(k);
for (int i = 0; i < k; ++i)
{
int a, b, c, d;
cin >> b >> a >> d >> c;
mx[i] = min(a, c);
Mx[i] = max(a, c);
my[i] = min(b, d);
My[i] = max(b, d);
}
vector<int> tx;
for (int i = 0; i < k; ++i)
{
tx.push_back(mx[i]);
tx.push_back(Mx[i]);
}
tx.push_back(0);
tx.push_back(n);
vector<int> ty;
for (int i = 0; i < k; ++i)
{
ty.push_back(my[i]);
ty.push_back(My[i]);
}
ty.push_back(0);
ty.push_back(m);
sort(tx.begin(), tx.end());
sort(ty.begin(), ty.end());
vector<int> x;
for (int i = 0; i < tx.size(); ++i)
if (i == 0 || tx[i] != tx[i - 1])
x.push_back(tx[i]);
vector<int> y;
for (int i = 0; i < ty.size(); ++i)
if (i == 0 || ty[i] != ty[i - 1])
y.push_back(ty[i]);
map<int, ll> M;
for (int i = 0; i < x.size() - 1; ++i)
{
for (int j = 0; j < y.size() - 1; ++j)
{
int h = 0;
for (int l = 0; l < k; ++l)
h = h * P + reg(x[i], y[j], mx[l], Mx[l], my[l], My[l]);
M[h] += (ll) (x[i + 1] - x[i]) * (ll) (y[j + 1] - y[j]);
}
}
ll odp = 0;
for (map<int, ll>::iterator it = M.begin(); it != M.end(); ++it)
odp = max(odp, it->second);
cout << odp;
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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | #include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; typedef long long ll; int n, m, k; const int P = 1000000007; int reg(int x, int y, int mx, int Mx, int my, int My) { if (x >= mx && x < Mx && y >= my && y < My) return 3; if (x >= mx && x < Mx && y < my) return 5; if (x >= mx && x < Mx && y >= My) return 5; if (x < mx && y >= my && y < My) return 7; if (x >= Mx && y >= my && y < My) return 7; return 11; } int main() { ios_base::sync_with_stdio(0); cin >> k >> m >> n; vector<int> mx(k), Mx(k), my(k), My(k); for (int i = 0; i < k; ++i) { int a, b, c, d; cin >> b >> a >> d >> c; mx[i] = min(a, c); Mx[i] = max(a, c); my[i] = min(b, d); My[i] = max(b, d); } vector<int> tx; for (int i = 0; i < k; ++i) { tx.push_back(mx[i]); tx.push_back(Mx[i]); } tx.push_back(0); tx.push_back(n); vector<int> ty; for (int i = 0; i < k; ++i) { ty.push_back(my[i]); ty.push_back(My[i]); } ty.push_back(0); ty.push_back(m); sort(tx.begin(), tx.end()); sort(ty.begin(), ty.end()); vector<int> x; for (int i = 0; i < tx.size(); ++i) if (i == 0 || tx[i] != tx[i - 1]) x.push_back(tx[i]); vector<int> y; for (int i = 0; i < ty.size(); ++i) if (i == 0 || ty[i] != ty[i - 1]) y.push_back(ty[i]); map<int, ll> M; for (int i = 0; i < x.size() - 1; ++i) { for (int j = 0; j < y.size() - 1; ++j) { int h = 0; for (int l = 0; l < k; ++l) h = h * P + reg(x[i], y[j], mx[l], Mx[l], my[l], My[l]); M[h] += (ll) (x[i + 1] - x[i]) * (ll) (y[j + 1] - y[j]); } } ll odp = 0; for (map<int, ll>::iterator it = M.begin(); it != M.end(); ++it) odp = max(odp, it->second); cout << odp; return 0; } |
English