| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
哪位大哥提供一点测试数据,从昨天检查到现在,实在不知道哪里错了,跪谢了!!!#include <stdio.h>
#include <math.h>
typedef struct rectangle{
int x1,y1;
int x2,y2;
struct rectangle *next;
}RECT;
bool contain(RECT o,RECT n){
if(o.x1<=n.x1&&o.x2>n.x1
&&o.x1<n.x2&&o.x2>=n.x2
&&o.y1<=n.y1&&o.y2>n.y1
&&o.y1<n.y2&&o.y2>=n.y2)
{
return true;
}
else
return false;
}
bool intersect(RECT o,RECT n){
if(o.x1<=n.x2&&o.x2>=n.x1&&o.y1<=n.y2&&o.y2>=n.y1)
return true;
else
return false;
}
void combine(RECT o,RECT &n){
n.x1=o.x1>n.x1?n.x1:o.x1;
n.y1=o.y1>n.y1?n.y1:o.y1;
n.x2=o.x2>n.x2?o.x2:n.x2;
n.y2=o.y2>n.y2?o.y2:n.y2;
}
void procedure(int x,int y,int n){
RECT temp,*head=NULL,*tail,*p,*t;
int rx,ry,r;
int i,sum,result;
bool skip;
if(n==0){
printf("%d\n",x*y);
return;
}
for(i=0;i<n;i++){
scanf("%d %d %d",&rx,&ry,&r);
temp.x1=rx-r;
temp.y1=ry-r;
temp.x2=rx+r;
temp.y2=ry+r;
skip=false;
while(1){
for(p=head;p;p=p->next){
if(contain(*p,temp)){
skip=true;
p=NULL;
break;
}
if(intersect(*p,temp)){
combine(*p,temp);
if(p==head){
head=head->next;
}
else{
for(t=head;t->next!=p;t=t->next);
t->next=p->next;
}
break;
}
}
if(p==NULL)
break;
}
if(!skip){
p=new RECT;
p->x1=temp.x1;
p->x2=temp.x2;
p->y1=temp.y1;
p->y2=temp.y2;
if(head==NULL){
head=p;
tail=p;
head->next=NULL;
}
else{
tail->next=p;
tail=p;
tail->next=NULL;
}
}
}
for(p=head,sum=0;p;p=p->next)
sum+=(p->x2-p->x1)*(p->y2-p->y1);
result=x*y-sum;
printf("%d\n",result);
}
int main(){
int x,y,n;
scanf("%d %d",&x,&y);
scanf("%d",&n);
procedure(x,y,n);
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator