CF Gym 100463D Evil (二维前缀和+离散)
题意:给一些带颜色的点,求一个最小的矩形,恰好包括一半的红色点,且不包括蓝色点。
题解:暴力,求个二维前缀和,用容斥原理更新一下。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 (二维前缀和+离散)的更多相关文章
- Gym 102091L Largest Allowed Area 【二分+二维前缀和】
<题目链接> 题目大意:给你一个由01组成的矩形,现在问你,该矩形中,最多只含一个1的正方形的边长最长是多少. 解题分析: 用二维前缀和维护一下矩形的01值,便于后面直接$O(1)$查询任 ...
- TTTTTTTTTTTTT CF Good Bye 2015 C- New Year and Domino(CF611C) 二维前缀
题目 题意:给你一个n*m由.和#组成的矩阵,.代表可以放,#代表不可以,问在左上角(px,py)到(右下角qx,qy)这样的一个矩阵中,放下一个长度为2宽度为1的牌有多少种放法: #include ...
- openjudge1768 最大子矩阵[二维前缀和or递推|DP]
总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...
- COGS1752 [BOI2007]摩基亚Mokia(CDQ分治 + 二维前缀和 + 线段树)
题目这么说的: 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它 ...
- poj-3739. Special Squares(二维前缀和)
题目链接: I. Special Squares There are some points and lines parellel to x-axis or y-axis on the plane. ...
- Good Bye 2015 C. New Year and Domino 二维前缀
C. New Year and Domino They say "years are like dominoes, tumbling one after the other". ...
- 计蒜客模拟赛D1T1 蒜头君打地鼠:矩阵旋转+二维前缀和
题目链接:https://nanti.jisuanke.com/t/16445 题意: 给你一个n*n大小的01矩阵,和一个k*k大小的锤子,锤子只能斜着砸,问只砸一次最多能砸到多少个1. 题解: 将 ...
- 二维前缀和模板题:P2004 领地选择
思路:就是使用二维前缀和的模板: 先放模板: #include<iostream> using namespace std; #define ll long long ; ll a[max ...
- 二维前缀和好题hdu6514
#include<bits/stdc++.h> #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; ]; )* ...
随机推荐
- CodeForces - 1017D Round #502 D. The Wu(状压预处理)
D. The Wu time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...
- 使用ASP.NET Core实现Docker的HealthCheck指令
写在前面 HealthCheck 不仅是对应用程序内运行情况.数据流通情况进行检查, 还包括应用程序对外部服务或依赖资源的健康检查. 健康检查通常是以暴露应用程序的HTTP端点的形式 实施,可用于配 ...
- [UE4]C++设置AnimInstance的相关问题
注意:ue4 4.17调用LoadObject<UAnimBlueprintGeneratedClass>直接崩 http://aigo.iteye.com/blog/2285001 UA ...
- ue4 打个log难如狗
注意: 把log相关两个宏写到类中,并编译后,在输出日志的位置的Categories关键字过滤的位置看不到自己的标签是因为需要先运行一次,输出一些这个标签的log后,这个自定义的标签才会显示在这 原文 ...
- ios 适配问题
两张图解决
- php输出变量加{}的作用
之前在输出字符串中有变量如 echo “中间有”; echo $i; echo "变量"; 现在发现一个好方法,把变量用{}括起来 echo "中间有{$i}变量&quo ...
- Vue中登录模块
- TaskFactory单例模式利用xml
/** * * Copyright (c) 1995-2009 Wonders Information Co.,Ltd. * 1518 Lianhang Rd,Shanghai 201112.P.R. ...
- Netty-flush
TimerServer: ch.pipeline().addLast(new TimeEncoder()); ch.pipeline().addLast(new TimeServerHandler() ...
- Linux+.NetCore+Nginx
Linux+.NetCore+Nginx搭建集群 本篇和大家分享的是Linux+NetCore+Nginx搭建负载集群,对于netcore2.0发布后,我一直在看官网的文档并学习,关注有哪些新增的东西 ...