题意:给一些带颜色的点,求一个最小的矩形,恰好包括一半的红色点,且不包括蓝色点。

题解:暴力,求个二维前缀和,用容斥原理更新一下。N很小所以我采用了离散优化,跑了个0ms。

之前没写过二维前缀和,加上离散写得也不是很熟练,所以搞了2个小时,好在是一发就过了。貌似有个坑,线不要特判,不然wa。

#include<cstdio>
#include<cmath>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
#include<cstring> using namespace std; //#define local const int maxn = ;
int Red; int X[maxn],szx;
int Y[maxn],szy; int G[maxn][maxn];
int sumb[maxn][maxn];
int suma[maxn][maxn]; struct Poi
{
int x,y;
int tp;
int sx,sy;
bool operator < (const Poi & rhs) const {
return x < rhs.x || (x == rhs.x && y < rhs.y);
}
void input(){
scanf("%d%d%d",&x,&y,&tp);
if(!tp)Red++;
}
void GetDis(){
sx = lower_bound(X,X+szx,x)-X;
sy = lower_bound(Y,Y+szy,y)-Y;
G[sx][sy] = tp;
}
}P[maxn]; const int INF = 0x7fffffff;
int main()
{
#ifdef local
freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
#endif // local
int N;
int cas = ;
while(~scanf("%d",&N)&&N){
Red = ;
memset(G,-,sizeof(G));
int minx = INF, miny = INF;
for(int i = ; i < N; i++){
P[i].input();
minx = min(minx,P[i].x);
miny = min(miny,P[i].y);
//Y[i] = P[i].y;
}
X[] = minx-; Y[] = miny- ;
for(int i = ; i <= N; i++) {
X[i] = P[i-].x;
Y[i] = P[i-].y;
}
sort(X,X+N+);
sort(Y,Y+N+);
szy = unique(Y,Y+N+) - Y;
szx = unique(X,X+N+) - X; memset(suma,,sizeof(suma));
memset(sumb,,sizeof(sumb)); for(int i = ; i < N; i++) P[i].GetDis(); for(int i = ; i < szx; i++)
for(int j = ; j < szy; j++){
suma[i][j] = suma[i-][j]+suma[i][j-]-suma[i-][j-]+(G[i][j]==);
sumb[i][j] = sumb[i-][j]+sumb[i][j-]-sumb[i-][j-]+(G[i][j]==);
}
Red >>= ;
int area = INF;
for(int lx = ; lx < szx; lx++){
for(int rx = lx+; rx < szx; rx++){
for(int ly = ; ly <szy; ly++){
for(int ry = ly+; ry < szy; ry++){
if(suma[rx][ry]-suma[rx][ly]-suma[lx][ry]+suma[lx][ly]) continue;
if(Red == sumb[rx][ry]-sumb[rx][ly]-sumb[lx][ry]+sumb[lx][ly]){
area = min(area,(X[rx]-X[lx+])*(Y[ry]-Y[ly+]));
}
}
}
}
}
printf("Case %d: %d\n",++cas,area!=INF?area:-);
}
return ;
}

CF Gym 100463D Evil (二维前缀和+离散)的更多相关文章

  1. Gym 102091L Largest Allowed Area 【二分+二维前缀和】

    <题目链接> 题目大意:给你一个由01组成的矩形,现在问你,该矩形中,最多只含一个1的正方形的边长最长是多少. 解题分析: 用二维前缀和维护一下矩形的01值,便于后面直接$O(1)$查询任 ...

  2. TTTTTTTTTTTTT CF Good Bye 2015 C- New Year and Domino(CF611C) 二维前缀

    题目 题意:给你一个n*m由.和#组成的矩阵,.代表可以放,#代表不可以,问在左上角(px,py)到(右下角qx,qy)这样的一个矩阵中,放下一个长度为2宽度为1的牌有多少种放法: #include ...

  3. openjudge1768 最大子矩阵[二维前缀和or递推|DP]

    总时间限制:  1000ms 内存限制:  65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...

  4. COGS1752 [BOI2007]摩基亚Mokia(CDQ分治 + 二维前缀和 + 线段树)

    题目这么说的: 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它 ...

  5. poj-3739. Special Squares(二维前缀和)

    题目链接: I. Special Squares There are some points and lines parellel to x-axis or y-axis on the plane. ...

  6. Good Bye 2015 C. New Year and Domino 二维前缀

    C. New Year and Domino   They say "years are like dominoes, tumbling one after the other". ...

  7. 计蒜客模拟赛D1T1 蒜头君打地鼠:矩阵旋转+二维前缀和

    题目链接:https://nanti.jisuanke.com/t/16445 题意: 给你一个n*n大小的01矩阵,和一个k*k大小的锤子,锤子只能斜着砸,问只砸一次最多能砸到多少个1. 题解: 将 ...

  8. 二维前缀和模板题:P2004 领地选择

    思路:就是使用二维前缀和的模板: 先放模板: #include<iostream> using namespace std; #define ll long long ; ll a[max ...

  9. 二维前缀和好题hdu6514

    #include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; ]; )* ...

随机推荐

  1. 怎么将vim的剪切版设置成系统的剪切版

    如果你用vim敲完了代码,怎么把代码提交到ACMoj的粘贴版上呢. 这是个问题. 去网上查了一下,首先有人说可以在vimrc里面添加 set clipboard=unnamed 我试了一下,没有效果. ...

  2. yzm10的ACM集训小感

    7月30号,ACM集训进行了两周,一切都已on the right way.这时的我适时地从题海中探出头,其实除了刷题,也该写点什么来总结下过去.首先,在第一周里,我学习了数据结构,知道了STL这么一 ...

  3. 火狐restclient安装和使用

    RESTClient是一款用于测试各种Web服务的插件,它可以向服务器发送各种HTTP请求(用户也可以自定义请求方式),并显示服务器响应.使用RESTClient您可以方便的测试各种Web服务,为您的 ...

  4. 苦逼三流小公司程序员这半年找工作经历(3)——选择offer

    本文按照企业规模.性质.规模,分成三类,点评一下遇到的这些公司.也算是为半年找工作经历的一个总结. 1,三流小公司 公司规模类似于笔者跳槽前所在企业,性质有外商独资.合资,当然大多数都是民营企业,规模 ...

  5. [poj百练]2754:八皇后 回溯

    描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的8皇后 ...

  6. 移动端专用css

    通过设置css属性 -webkit-tap-highlight-color: rgba(0, 0, 0, 0);取消掉手机端webkit浏览器 点击按钮或超链接之类的 默认灰色背景色 设置css属性 ...

  7. Unity 自动寻路Navmesh之跳跃,攀爬,斜坡

    在之前的几篇Blog总,我们已经系统学习了自动寻路插件Navmesh的相关概念和细节.然而,如果要做一个场景精美的手游,需要用到各种复杂的场景地形,而不仅仅是平地上的自动寻路.今天我们将通过一个完整的 ...

  8. 【转】insert忽略重复、mysql插入操作跳过、插入覆盖覆盖、mysql更新重复

    需求背景:一般情况,插入数据的时候,有脏数据的情况,主键重复的话,直接insert into 会报错的,然后下面的sql都不再执行了,如果可以确定后面的数据可以覆盖前面的数据,直接用replace i ...

  9. uoj#280. 【UTR #2】题目难度提升(构造)

    传送门 咱先膜一下\(GXZ\)再说 我们先把序列从小到大排序,然后分情况讨论 无解是不存在的,从小到大输出所有数肯定可行 情况一,如果\(a[mid]=a[mid+1]\),因为最终的中位数也是它们 ...

  10. CF920F SUM and REPLACE 线段树

    给你一个数组a_i​,D(x)为x的约数个数 两种操作: 1.将[l,r]的a_i​替换为D(a_i) 2.输出∑​a_i ( l <= i <= r ) 当区间最大值<=2时,就不 ...