hdu1246 Counting Squares(暴力hash)

题目意思:

每行给出4个正整数,代表矩形的四个顶点坐标,现给出一系列的数据,当给的数-1 -1 -1 -1时表示一组数据结束,给出这些矩形覆盖的面积,当数据为-2 -2 -2 -2时结束输入。

http://acm.hdu.edu.cn/showproblem.php?pid=1264

题目分析:

首先注意到数据范围较小,而且给的数据为正整数,但是不能重复计算面积,因此我们化整为零计算每个矩形分成的单位面积1的个数,进行累加即可,为了保证不重复计算面积,用一个二维数组表示该面积已经被计算即可,见代码。

AC代码:

/**
 *直接暴力hash,用hash数组记录是否
 *该单位面积被标记对已经记录的面积
 *进行标记
 */
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int squ[101][101]={0};
int main()
{
    int a,b,c,d,t,i,j,sum=0;
    memset(squ,0,sizeof(squ));
    while(scanf("%d%d%d%d",&a,&b,&c,&d)>0){
        if(a==-1){
            printf("%d\n",sum);
            sum=0;
            memset(squ,0,sizeof(squ));
            continue;//注意这里需要跳出,进行下次输入(调试了很长是时间)
        }
        if(a==-2){
            printf("%d\n",sum);
            break;
        }
        if(a>c){//排序坐标X轴
            t=a; a=c; c=t;
        }
        if(b>d){//排序Y轴
            t=b; b=d; d=t;
        }
        for(i=a+1;i<=c;i++){//注意此处应该从a+1开始,下面同理
            for(j=b+1;j<=d;j++){
                if(squ[i][j]==0){//未覆盖的面积
                    squ[i][j]=1;//标记以覆盖
                    sum++;
                }
            }
        }
    }
    return 0;
}
时间: 2024-10-18 00:25:29

hdu1246 Counting Squares(暴力hash)的相关文章

hdu 1496 Equations (暴力+hash)

题目意思: http://acm.hdu.edu.cn/showproblem.php?pid=1496 对于方程a*x1^2+b*x2^2+c*x3^2+d*x4^2=0,给出a,b,c,d,求出有多少种方法使得方程成立,xi!=0,属于[-100,100] a,b,c,d也不为0,属于[-50,50]. Sample Input 1 2 3 -4 1 1 1 1 Sample Output 39088 0 题目分析: 直接暴力的话,会100^4,,超时,我们可以把等式转化为a*x1^2+b*

HDU 1264 Counting Squares(线段树求面积的并)

Counting Squares Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 1885    Accepted Submission(s): 946 Problem Description Your input is a series of rectangles, one per line. Each rectangle is sp

HDU 1264 Counting Squares (线段树-扫描线-矩形面积并)

Problem A : Counting Squares From:HDU, 1264 Problem Description Your input is a series of rectangles, one per line. Each rectangle is specified as two points(X,Y) that specify the opposite corners of a rectangle. All coordinates will be integers in t

HDU 1264 Counting Squares(Hash)或者(线段树+线扫描)

http://acm.hdu.edu.cn/showproblem.php?pid=1264 题意:给你矩形的左下角和右上角两个坐标,让你求这些矩形覆盖的面积的大小!~ 分析:一看就是线段树+线扫描的问题,其实如果你仔细看一下就会发现还有简单的方法解决它,因为题目所给的坐标值在0~100之间的整数, 这样我们就可以用Hash[][]来表示1*1矩形的个数,Hash[i][j]表示以坐标值(i,j)为左下角1*1的矩形是否被覆盖,这样我们就可以用Hash二维数组表示平面上1*1矩形个数. 注意:我

ZOJ (狗狗)1426 Counting Rectangles(暴力)

Counting Rectangles Time Limit: 2 Seconds      Memory Limit: 65536 KB We are given a figure consisting of only horizontal and vertical line segments. Our goal is to count the number of all different rectangles formed by these segments. As an example,

uva 201 Squares 暴力

暴力 把边的信息装到一个field数组里面 第一维存水平线 第二维存竖直线 多重循环 先从边长为1正方形开始检查 每次检查都重新扫一下它的外圈 注意竖直线的地方它先给列坐标再给行坐标 输出有些繁琐 注意输出空行还有星星 #include <cstdio> #include <cstring> #include <cstdlib> #include <iostream> #include <algorithm> #include <cmath

poj 2002 Squares,hash

poj 2002 Squares 给出n个点,问能组成多少个正方形? 题解: 先把每个点hash 然后枚举两点(即枚举正方形的一条边),然后通过三角形全等,可以推出正方形的另外两点,在hash表里查找这两点看是存在,存在则 Cnt +1. 最后 answer = Cnt/4 //因为同一正方形都统计了4次. #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const

D - Counting Squares

Your input is a series of rectangles, one per line. Each rectangle is specified as two points(X,Y) that specify the opposite corners of a rectangle. All coordinates will be integers in the range 0 to 100. For example, the line 5 8 7 10 specifies the

HDU 1264 Counting Squares(模拟)

题目链接 Problem Description Your input is a series of rectangles, one per line. Each rectangle is specified as two points(X,Y) that specify the opposite corners of a rectangle. All coordinates will be integers in the range 0 to 100. For example, the lin