URAL 1097. Square Country 2 (离散化,最大正方形面积)
2013-08-24 10:50
260 查看
题意:http://www.nocow.cn/index.php/Translate:URAL/1097
离散化之后找最大没有被覆盖的正方形。暴力能过。
离散化之后找最大没有被覆盖的正方形。暴力能过。
#include <iostream> #include <cmath> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #include <stack> #include <map> #include <set> #include <list> #include <deque> #include <string> #define LL long long #define DB double #define SI(a) scanf("%d",&a) #define SD(a) scanf("%lf",&a) #define SS(a) scanf("%s",a) #define SF scanf #define PF printf #define MM(a,v) memset(a,v,sizeof(a)) #define REP(i,a,b) for(int (i)=(a);(i)<(b);(i)++) #define REPD(i,a,b) for(int (i)=(a);(i)>(b);(i)--) #define N 209 #define INF 0x3f3f3f3f #define EPS 1e-8 #define bug puts("bug") using namespace std; int v ; int x ,y ; int n,m; int k; int lx=0,ly=0; struct R{ int val,x,y,l; void get(){ SI(val);SI(l);SI(x);SI(y); } } re ,tmp ; int finx(int t) { int l = 0,r = lx-1,mid; while(l<=r) { mid = (l+r)>>1; if(x[mid]==t) return mid; if(x[mid]>t) r = mid-1; else l = mid+1; } return -1; } int finy(int t) { int l = 0,r = ly-1,mid; while(l<=r) { mid = (l+r)>>1; if(y[mid]==t) return mid; if(y[mid]>t) r = mid-1; else l = mid+1; } return -1; } int oor(int a,int b) { for(int i=a;x[i]-x[a]<m;i++) for(int j=b;y[j]-y[b]<m;j++) if(v[i][j]) return 0; return 1; } int ok(int c) { MM(v,0); REP(i,0,k) if(re[i].val>c) { int xl = finx(re[i].x),xr = finx(re[i].x+re[i].l); int yl = finy(re[i].y),yr = finy(re[i].y+re[i].l); REP(_i,xl,xr) REP(_j,yl,yr) v[_i][_j] = 1; } REP(i,0,lx) { if(x[i]+m>n+1) break; REP(j,0,ly) { if(y[j]+m>n+1) break; if(oor(i,j)) return 1; } } return 0; } void solve() { x[lx++] = 1;y[ly++] = 1; x[lx++] = n+1;y[ly++] = n+1; REP(i,0,k) { x[lx++] = re[i].x; x[lx++] = re[i].x+re[i].l; y[ly++] = re[i].y; y[ly++] = re[i].y+re[i].l; } sort(x,x+lx);sort(y,y+ly); lx = unique(x,x+lx)-x; ly = unique(y,y+ly)-y; x[lx] = y[ly] = INF; int ans=-1,l=1,r=100; while(l<=r) { int mid = (l+r)>>1; if(ok(mid)) { ans = mid; r = mid-1; }else { l = mid+1; } } if(ans==-1) puts("IMPOSSIBLE"); else PF("%d\n",ans); } int main() { #ifndef ONLINE_JUDGE freopen("in.txt","r",stdin); #endif SI(n);SI(m); SI(k); REP(i,0,k) { re[i].get(); } solve(); return 0; }
相关文章推荐
- 华为机考 给你一个N*M的矩阵,每个位置的值是0或1,求一个面积最大的子矩阵,这个矩阵必须是一个正方形,且里面只能由1构成,输出最大的正方形边长。其中n,m<=400;
- LeetCode: 221_Maximal Square | 二维0-1矩阵中计算包含1的最大正方形的面积 | Medium
- 求解最大正方形面积 — leetcode 221. Maximal Square
- leetcode 221. Maximal Square 最大正方形面积 + 动态规划DP实现
- 求01矩阵中的最大的正方形面积
- URAL 1333 Genie Bomber 2(正方形被圆覆盖的面积)
- 求全1的最大正方形的边长 和 全1的最大子矩阵的面积 和POJ 2559 最大直方图
- [置顶] 最大正方形
- HDU 2883 kebab(离散化+最大流)
- 1069: [SCOI2007]最大土地面积 (旋转卡壳)
- [SCOI2007]最大土地面积
- 度度熊有一张网格纸,但是纸上有一些点过的点,每个点都在网格点上,若把网格看成一个坐标轴平行于网格线的坐标系的话,每个点可以用一对整数x,y来表示。度度熊必须沿着网格线画一个正方形,使所有点在正方形的内部或者边界。然后把这个正方形剪下来。问剪掉正方形的最小面积是多少。
- N个点求最大的四边形面积
- ZOJ 2419-- Triangle-凸包+旋转卡壳求最大面积三角形(计算几何)
- 用单调栈解决最大连续矩形面积问题
- SPOJ 3931 求最大面积三角形
- 求点集中面积最大的三角形
- URAL 1076 Trash 【最大权匹配KM快速模板O(N^3)】
- HDU 1542——Atlantis(线段树+面积并+离散化+扫描线)
- 面积最大的矩形