2014年1月17日 星期五

[USACO] 3-1-4 Shaping Regions


#include<stdio.h>
#include<algorithm>
using namespace std;
int ans[2505]={0},x1[1005],y1[1005],x2[1005],y2[1005],color[1005],N;
void cnt(int l1,int r1,int l2,int r2,int c,int add){
    if(l1>r1 || l2>r2) return;
    if(add==N){
        ans[c]+=(r1-l1+1)*(r2-l2+1);
        return;
    }
    if(l1>x2[add] || l2>y2[add] || r1<x1[add] || r2<y1[add])
        cnt(l1,r1,l2,r2,c,add+1);
    else{
        if(l2<y1[add])
            cnt(l1,r1,l2,y1[add]-1,c,add+1);
        if(r2>y2[add])
            cnt(l1,r1,y2[add]+1,r2,c,add+1);
        if(l1<x1[add])
            cnt(l1,x1[add]-1,max(y1[add],l2),min(y2[add],r2),c,add+1);
        if(r1>x2[add])
            cnt(x2[add]+1,r1,max(y1[add],l2),min(y2[add],r2),c,add+1);
    }
}
int main(){
    int n,m,i,j;
    scanf("%d%d%d",&n,&m,&N);
    for(i=0;i<N;i++)
        scanf("%d%d%d%d%d",&x1[i],&y1[i],&x2[i],&y2[i],&color[i]),x1[i]++,y1[i]++;
    ans[1]=n*m;
    for(i=0;i<N;i++)
        cnt(x1[i],x2[i],y1[i],y2[i],color[i],i+1);
    for(i=2;i<=2500;i++)
        if(ans[i]>0)
            ans[1]-=ans[i];
    for(i=1;i<=2500;i++)
        if(ans[i]>0)
            printf("%d %d\n",i,ans[i]);
}

沒有留言:

張貼留言