Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198185
  • 博文数量: 67
  • 博客积分: 2970
  • 博客等级: 少校
  • 技术积分: 685
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-23 11:36
文章分类

全部博文(67)

文章存档

2012年(2)

2011年(19)

2010年(46)

我的朋友

分类: C/C++

2010-08-09 09:22:43

#include<stdio.h>
#include<algorithm>
using namespace std;

const int Maxn=110;
double vertical[Maxn*2],horizon[Maxn*2];
bool visit[Maxn*2][Maxn*2];            //标识由超元线段所围成的单元矩形被访问


struct rectangle
{
    double x1,x2,y1,y2;
};
rectangle rec[Maxn];
int n;

int cmp(const void *a,const void *b)
{
    return *(double *)a>*(double *)b?1:-1;        //若直接a,b做差,由double返回int可能出现偏差

}

int main()
{
    int count=0;
    while(scanf("%d",&n),n)
    {
        for(int i=0;i<n;i++)
        {
            scanf("%lf%lf%lf%lf",&rec[i].x1,&rec[i].y1,&rec[i].x2,&rec[i].y2);
            horizon[2*i]=rec[i].x1;horizon[2*i+1]=rec[i].x2;
            vertical[2*i]=rec[i].y1;vertical[2*i+1]=rec[i].y2;
        }

        qsort(vertical,2*n,sizeof(double),cmp);
        qsort(horizon,2*n,sizeof(double),cmp);

        for(int i=0;i<2*n;i++)
            for(int j=0;j<2*n;j++)
                visit[i][j]=false;

        double sum=0;
        for(int i=1;i<2*n;i++)
        {
            if(horizon[i]==horizon[i-1])    continue;

            for(int j=0;j<n;j++)
            {
                if(rec[j].x1<=horizon[i-1]&&rec[j].x2>=horizon[i])
                {
                    for(int k=1;k<2*n;k++)
                    {
                        if(vertical[k]==vertical[k-1])    continue;

                        if(rec[j].y1<=vertical[k-1]&&rec[j].y2>=vertical[k]&&!visit[i][k])
                        {
                            sum+=(horizon[i]-horizon[i-1])*(vertical[k]-vertical[k-1]);
                            visit[i][k]=true;
                        }
                    }
                }
            }
        }
        printf("Test case #%d\nTotal explored area: %.2lf\n\n",++count,sum);
    }
    return 0;
}

 

关于离散化的具体内容,可以参看国家集训队1999年论文集

阅读(801) | 评论(0) | 转发(0) |
0

上一篇:pku1159 Palindrome

下一篇:pku1177 Picture

给主人留下些什么吧!~~