#include <cstdio> #include <algorithm> using namespace std; int maksRezerwatu; int n,x,y,buf,x1[500002],y1[500002],x2[500002],y2[500002]; int pole[5005][5005]; void checknext(int z){ if(z == 0){ int tempMax = 0; for(int i=0; i<=x; i++){ for(int j=0; j<=y; j++){ if(pole[i][j] == n) tempMax++; //printf("%d",pole[i][j]); } //printf("\n"); } //printf("pole:%d\n\n",tempMax); if( tempMax > maksRezerwatu) maksRezerwatu = tempMax; return; } //mode 1 for(int i=x1[z]; i<x2[z]; i++) for(int j=y1[z]; j<y2[z]; j++) pole[i][j] ++; checknext( z-1); for(int i=x1[z]; i<x2[z]; i++) for(int j=y1[z]; j<y2[z]; j++) pole[i][j] --; //mode 2 for(int i=x1[z]; i<x2[z]; i++) for(int j=0; j<y1[z]; j++) pole[i][j] ++; for(int i=x1[z]; i<x2[z]; i++) for(int j=y2[z]; j<y; j++) pole[i][j] ++; checknext( z-1); for(int i=x1[z]; i<x2[z]; i++) for(int j=0; j<y1[z]; j++) pole[i][j] --; for(int i=x1[z]; i<x2[z]; i++) for(int j=y2[z]; j<y; j++) pole[i][j] --; //mode 3 for(int i=0; i<x1[z]; i++) for(int j=y1[z]; j<y2[z]; j++) pole[i][j] ++; for(int i=x2[z]; i<x; i++) for(int j=y1[z]; j<y2[z]; j++) pole[i][j] ++; checknext( z-1); for(int i=0; i<x1[z]; i++) for(int j=y1[z]; j<y2[z]; j++) pole[i][j] --; for(int i=x2[z]; i<x; i++) for(int j=y1[z]; j<y2[z]; j++) pole[i][j] --; //mode 4 for(int i=0; i<x1[z]; i++) for(int j=0; j<y1[z]; j++) pole[i][j] ++; for(int i=x2[z]; i<x; i++) for(int j=y2[z]; j<y; j++) pole[i][j] ++; for(int i=0; i<x1[z]; i++) for(int j=y2[z]; j<y; j++) pole[i][j] ++; for(int i=x2[z]; i<x; i++) for(int j=0; j<y1[z]; j++) pole[i][j] ++; checknext( z-1); for(int i=0; i<x1[z]; i++) for(int j=0; j<y1[z]; j++) pole[i][j] --; for(int i=x2[z]; i<x; i++) for(int j=y2[z]; j<y; j++) pole[i][j] --; for(int i=0; i<x1[z]; i++) for(int j=y2[z]; j<y; j++) pole[i][j] --; for(int i=x2[z]; i<x; i++) for(int j=0; j<y1[z]; j++) pole[i][j] --; return; } int main() { //int pole[1000][1000]; //int n,x,y,buf,x1[500002],y1[500002],x2[500002],y2[500002]; scanf("%d %d %d",&n,&x,&y); for(int i=0; i<= x; i++) for(int j=0; j<=y; j++) pole[x][y]=0; for(int i=1; i<=n; i++){ maksRezerwatu = 0; scanf("%d %d %d %d",&x1[i],&y1[i],&x2[i],&y2[i]); if(x1[i] > x2[i]) swap( x1[i], x2[i]); if(y1[i] > y2[i]) swap( y1[i], y2[i]); } checknext(n); printf("%d\n",maksRezerwatu); 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 | #include <cstdio> #include <algorithm> using namespace std; int maksRezerwatu; int n,x,y,buf,x1[500002],y1[500002],x2[500002],y2[500002]; int pole[5005][5005]; void checknext(int z){ if(z == 0){ int tempMax = 0; for(int i=0; i<=x; i++){ for(int j=0; j<=y; j++){ if(pole[i][j] == n) tempMax++; //printf("%d",pole[i][j]); } //printf("\n"); } //printf("pole:%d\n\n",tempMax); if( tempMax > maksRezerwatu) maksRezerwatu = tempMax; return; } //mode 1 for(int i=x1[z]; i<x2[z]; i++) for(int j=y1[z]; j<y2[z]; j++) pole[i][j] ++; checknext( z-1); for(int i=x1[z]; i<x2[z]; i++) for(int j=y1[z]; j<y2[z]; j++) pole[i][j] --; //mode 2 for(int i=x1[z]; i<x2[z]; i++) for(int j=0; j<y1[z]; j++) pole[i][j] ++; for(int i=x1[z]; i<x2[z]; i++) for(int j=y2[z]; j<y; j++) pole[i][j] ++; checknext( z-1); for(int i=x1[z]; i<x2[z]; i++) for(int j=0; j<y1[z]; j++) pole[i][j] --; for(int i=x1[z]; i<x2[z]; i++) for(int j=y2[z]; j<y; j++) pole[i][j] --; //mode 3 for(int i=0; i<x1[z]; i++) for(int j=y1[z]; j<y2[z]; j++) pole[i][j] ++; for(int i=x2[z]; i<x; i++) for(int j=y1[z]; j<y2[z]; j++) pole[i][j] ++; checknext( z-1); for(int i=0; i<x1[z]; i++) for(int j=y1[z]; j<y2[z]; j++) pole[i][j] --; for(int i=x2[z]; i<x; i++) for(int j=y1[z]; j<y2[z]; j++) pole[i][j] --; //mode 4 for(int i=0; i<x1[z]; i++) for(int j=0; j<y1[z]; j++) pole[i][j] ++; for(int i=x2[z]; i<x; i++) for(int j=y2[z]; j<y; j++) pole[i][j] ++; for(int i=0; i<x1[z]; i++) for(int j=y2[z]; j<y; j++) pole[i][j] ++; for(int i=x2[z]; i<x; i++) for(int j=0; j<y1[z]; j++) pole[i][j] ++; checknext( z-1); for(int i=0; i<x1[z]; i++) for(int j=0; j<y1[z]; j++) pole[i][j] --; for(int i=x2[z]; i<x; i++) for(int j=y2[z]; j<y; j++) pole[i][j] --; for(int i=0; i<x1[z]; i++) for(int j=y2[z]; j<y; j++) pole[i][j] --; for(int i=x2[z]; i<x; i++) for(int j=0; j<y1[z]; j++) pole[i][j] --; return; } int main() { //int pole[1000][1000]; //int n,x,y,buf,x1[500002],y1[500002],x2[500002],y2[500002]; scanf("%d %d %d",&n,&x,&y); for(int i=0; i<= x; i++) for(int j=0; j<=y; j++) pole[x][y]=0; for(int i=1; i<=n; i++){ maksRezerwatu = 0; scanf("%d %d %d %d",&x1[i],&y1[i],&x2[i],&y2[i]); if(x1[i] > x2[i]) swap( x1[i], x2[i]); if(y1[i] > y2[i]) swap( y1[i], y2[i]); } checknext(n); printf("%d\n",maksRezerwatu); return 0; } |