#include <iostream> #include <cmath> using namespace std; int main() { int n; int X; int Y; int wynik = 0; int bufor = 0; bool bufor2 = 1; cin >> n; cin >> X; cin >> Y; int *kartka = new int[n]; for (int i = 0; i < n; i++) kartka[i] = 0; int *** rant = new int **[n]; for (int i = 0; i < n; i++) { rant[i] = new int *[2]; for (int j = 0; j < 2; j++) { rant[i][j] = new int[2]; for (int k = 0; k < 2; k++) { cin >> rant[i][j][k]; rant[i][j][k]--; } } } bool ****mapa = new bool ***[n]; for (int i = 0; i < n; i++) { mapa[i] = new bool **[4]; for (int j = 0; j < 4; j++) { mapa[i][j] = new bool *[X]; for (int k = 0; k < X; k++) { mapa[i][j][k] = new bool[Y]; for (int l = 0; l < Y; l++) { mapa[i][j][k][l] = 0; if (j == 0) { if (rant[i][0][0] > rant[i][1][0]) { if (rant[i][0][1] > rant[i][1][1]) { if (k <= rant[i][0][0] && k > rant[i][1][0] && l <= rant[i][0][1] && l > rant[i][1][1]) mapa[i][j][k][l] = 1; } else { if (k <= rant[i][0][0] && k > rant[i][1][0] && l <= rant[i][1][1] && l > rant[i][0][1]) mapa[i][j][k][l] = 1; } } else { if (rant[i][0][1] > rant[i][1][1]) { if (k <= rant[i][1][0] && k > rant[i][0][0] && l <= rant[i][0][1] && l > rant[i][1][1]) mapa[i][j][k][l] = 1; } else { if (k <= rant[i][1][0] && k > rant[i][0][0] && l <= rant[i][1][1] && l > rant[i][0][1]) mapa[i][j][k][l] = 1; } } } else if (j == 1) { if (rant[i][0][0] > rant[i][1][0]) { if (rant[i][0][1] > rant[i][1][1]) { if (k <= rant[i][0][0] && k > rant[i][1][0] && (l > rant[i][0][1] || l <= rant[i][1][1])) mapa[i][j][k][l] = 1; } else { if (k <= rant[i][0][0] && k > rant[i][1][0] && (l > rant[i][1][1] || l <= rant[i][0][1])) mapa[i][j][k][l] = 1; } } else { if (rant[i][0][1] > rant[i][1][1]) { if (k <= rant[i][1][0] && k > rant[i][0][0] && (l > rant[i][0][1] || l <= rant[i][1][1])) mapa[i][j][k][l] = 1; } else { if (k <= rant[i][1][0] && k > rant[i][0][0] && (l > rant[i][1][1] || l <= rant[i][0][1])) mapa[i][j][k][l] = 1; } } } else if (j == 2) { if (rant[i][0][0] > rant[i][1][0]) { if (rant[i][0][1] > rant[i][1][1]) { if ((k > rant[i][0][0] || k <= rant[i][1][0]) && l <= rant[i][0][1] && l > rant[i][1][1]) mapa[i][j][k][l] = 1; } else { if ((k > rant[i][0][0] || k <= rant[i][1][0]) && l <= rant[i][1][1] && l > rant[i][0][1]) mapa[i][j][k][l] = 1; } } else { if (rant[i][0][1] > rant[i][1][1]) { if ((k > rant[i][1][0] || k <= rant[i][0][0]) && l <= rant[i][0][1] && l > rant[i][1][1]) mapa[i][j][k][l] = 1; } else { if ((k > rant[i][1][0] || k <= rant[i][0][0]) && l <= rant[i][1][1] && l > rant[i][0][1]) mapa[i][j][k][l] = 1; } } } else { if (rant[i][0][0] > rant[i][1][0]) { if (rant[i][0][1] > rant[i][1][1]) { if ((k > rant[i][0][0] && (l > rant[i][0][1] || l <= rant[i][1][1])) || (k <= rant[i][1][0] && (l > rant[i][0][1] || l <= rant[i][1][1]))) mapa[i][j][k][l] = 1; } else { if ((k > rant[i][0][0] && (l > rant[i][1][1] || l <= rant[i][0][1])) || (k <= rant[i][1][0] && (l > rant[i][1][1] || l <= rant[i][0][1]))) mapa[i][j][k][l] = 1; } } else { if (rant[i][0][1] > rant[i][1][1]) { if ((k > rant[i][1][0] && (l > rant[i][0][1] || l <= rant[i][1][1])) || (k <= rant[i][0][0] && (l > rant[i][0][1] || l <= rant[i][1][1]))) mapa[i][j][k][l] = 1; } else { if ((k > rant[i][1][0] && (l > rant[i][1][1] || l <= rant[i][0][1])) || (k <= rant[i][0][0] && (l > rant[i][1][1] || l <= rant[i][0][1]))) mapa[i][j][k][l] = 1; } } } } } } } for (int i = 0; i < pow(4, n); i++) { for (int j = 0; j < X; j++) { for (int k = 0; k < Y; k++) { for (int l = 0; l < n; l++) { if (mapa[l][kartka[l]][j][k] != 1) { bufor2 = 0; break; } } if (bufor2 == 1) bufor++; bufor2 = 1; } } if (bufor > wynik) wynik = bufor; bufor = 0; kartka[n - 1]++; for (int j = n - 1; j >= 0; j--) { if (kartka[j] == 4) { kartka[j - 1]++; kartka[j] = 0; } } } cout << wynik; delete[] kartka; for (int i = 0; i < n; i++) { for (int j = 0; j < 4; j++) { for (int k = 0; k < X; k++) delete[] mapa[i][j][k]; delete[] mapa[i][j]; } delete[] mapa[i]; } delete[] mapa; for (int i = 0; i < n; i++) { for (int j = 0; j < 2; j++) delete[] rant[i][j]; delete[] rant[i]; } delete[] rant; 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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 | #include <iostream> #include <cmath> using namespace std; int main() { int n; int X; int Y; int wynik = 0; int bufor = 0; bool bufor2 = 1; cin >> n; cin >> X; cin >> Y; int *kartka = new int[n]; for (int i = 0; i < n; i++) kartka[i] = 0; int *** rant = new int **[n]; for (int i = 0; i < n; i++) { rant[i] = new int *[2]; for (int j = 0; j < 2; j++) { rant[i][j] = new int[2]; for (int k = 0; k < 2; k++) { cin >> rant[i][j][k]; rant[i][j][k]--; } } } bool ****mapa = new bool ***[n]; for (int i = 0; i < n; i++) { mapa[i] = new bool **[4]; for (int j = 0; j < 4; j++) { mapa[i][j] = new bool *[X]; for (int k = 0; k < X; k++) { mapa[i][j][k] = new bool[Y]; for (int l = 0; l < Y; l++) { mapa[i][j][k][l] = 0; if (j == 0) { if (rant[i][0][0] > rant[i][1][0]) { if (rant[i][0][1] > rant[i][1][1]) { if (k <= rant[i][0][0] && k > rant[i][1][0] && l <= rant[i][0][1] && l > rant[i][1][1]) mapa[i][j][k][l] = 1; } else { if (k <= rant[i][0][0] && k > rant[i][1][0] && l <= rant[i][1][1] && l > rant[i][0][1]) mapa[i][j][k][l] = 1; } } else { if (rant[i][0][1] > rant[i][1][1]) { if (k <= rant[i][1][0] && k > rant[i][0][0] && l <= rant[i][0][1] && l > rant[i][1][1]) mapa[i][j][k][l] = 1; } else { if (k <= rant[i][1][0] && k > rant[i][0][0] && l <= rant[i][1][1] && l > rant[i][0][1]) mapa[i][j][k][l] = 1; } } } else if (j == 1) { if (rant[i][0][0] > rant[i][1][0]) { if (rant[i][0][1] > rant[i][1][1]) { if (k <= rant[i][0][0] && k > rant[i][1][0] && (l > rant[i][0][1] || l <= rant[i][1][1])) mapa[i][j][k][l] = 1; } else { if (k <= rant[i][0][0] && k > rant[i][1][0] && (l > rant[i][1][1] || l <= rant[i][0][1])) mapa[i][j][k][l] = 1; } } else { if (rant[i][0][1] > rant[i][1][1]) { if (k <= rant[i][1][0] && k > rant[i][0][0] && (l > rant[i][0][1] || l <= rant[i][1][1])) mapa[i][j][k][l] = 1; } else { if (k <= rant[i][1][0] && k > rant[i][0][0] && (l > rant[i][1][1] || l <= rant[i][0][1])) mapa[i][j][k][l] = 1; } } } else if (j == 2) { if (rant[i][0][0] > rant[i][1][0]) { if (rant[i][0][1] > rant[i][1][1]) { if ((k > rant[i][0][0] || k <= rant[i][1][0]) && l <= rant[i][0][1] && l > rant[i][1][1]) mapa[i][j][k][l] = 1; } else { if ((k > rant[i][0][0] || k <= rant[i][1][0]) && l <= rant[i][1][1] && l > rant[i][0][1]) mapa[i][j][k][l] = 1; } } else { if (rant[i][0][1] > rant[i][1][1]) { if ((k > rant[i][1][0] || k <= rant[i][0][0]) && l <= rant[i][0][1] && l > rant[i][1][1]) mapa[i][j][k][l] = 1; } else { if ((k > rant[i][1][0] || k <= rant[i][0][0]) && l <= rant[i][1][1] && l > rant[i][0][1]) mapa[i][j][k][l] = 1; } } } else { if (rant[i][0][0] > rant[i][1][0]) { if (rant[i][0][1] > rant[i][1][1]) { if ((k > rant[i][0][0] && (l > rant[i][0][1] || l <= rant[i][1][1])) || (k <= rant[i][1][0] && (l > rant[i][0][1] || l <= rant[i][1][1]))) mapa[i][j][k][l] = 1; } else { if ((k > rant[i][0][0] && (l > rant[i][1][1] || l <= rant[i][0][1])) || (k <= rant[i][1][0] && (l > rant[i][1][1] || l <= rant[i][0][1]))) mapa[i][j][k][l] = 1; } } else { if (rant[i][0][1] > rant[i][1][1]) { if ((k > rant[i][1][0] && (l > rant[i][0][1] || l <= rant[i][1][1])) || (k <= rant[i][0][0] && (l > rant[i][0][1] || l <= rant[i][1][1]))) mapa[i][j][k][l] = 1; } else { if ((k > rant[i][1][0] && (l > rant[i][1][1] || l <= rant[i][0][1])) || (k <= rant[i][0][0] && (l > rant[i][1][1] || l <= rant[i][0][1]))) mapa[i][j][k][l] = 1; } } } } } } } for (int i = 0; i < pow(4, n); i++) { for (int j = 0; j < X; j++) { for (int k = 0; k < Y; k++) { for (int l = 0; l < n; l++) { if (mapa[l][kartka[l]][j][k] != 1) { bufor2 = 0; break; } } if (bufor2 == 1) bufor++; bufor2 = 1; } } if (bufor > wynik) wynik = bufor; bufor = 0; kartka[n - 1]++; for (int j = n - 1; j >= 0; j--) { if (kartka[j] == 4) { kartka[j - 1]++; kartka[j] = 0; } } } cout << wynik; delete[] kartka; for (int i = 0; i < n; i++) { for (int j = 0; j < 4; j++) { for (int k = 0; k < X; k++) delete[] mapa[i][j][k]; delete[] mapa[i][j]; } delete[] mapa[i]; } delete[] mapa; for (int i = 0; i < n; i++) { for (int j = 0; j < 2; j++) delete[] rant[i][j]; delete[] rant[i]; } delete[] rant; return 0; } |