1 solutions

  • 0
    @ 2025-11-5 19:33:48

    C :

    
    #include <stdio.h>
    #define MAX 1001
    
    typedef struct 
    {
        long px,py,qx,qy,color;
    }rectangular;
    
    FILE *fi,*fo;
    long A,B,n,cur_c;
    long sq[MAX];
    rectangular R[MAX];
    
    void compute(long px,long py,long qx,long qy,long posi)
    {
        do posi++; 
        while (posi<=n && 
        ( R[posi].px>=qx || 
        R[posi].py>=qy || 
        R[posi].qx<=px || 
        R[posi].qy<=py ) );
        if (posi>n) //未找到重叠部分
            sq[cur_c]+=(qx-px)*(qy-py);
        else        //有重叠部分 拆分矩形
        {
            if (px<R[posi].px)
            {
                compute(px,py,R[posi].px,qy,posi);
                px=R[posi].px;
            }
            if (qx>R[posi].qx)
            {
                compute(R[posi].qx,py,qx,qy,posi);
                qx=R[posi].qx;
            }
            if (py<R[posi].py)
                compute(px,py,qx,R[posi].py,posi);  
            if (qy>R[posi].qy)
                compute(px,R[posi].qy,qx,qy,posi); 
        }
    }
    
    int main(void)
    {
        long i;
        long px,py,qx,qy,color;
        fi=fopen("rect1.in","r");
        fo=fopen("rect1.out","w");
        fscanf(fi,"%ld%ld%ld",&A,&B,&n);
        for (i=1;i<=n;i++)
        {
            fscanf(fi,"%ld%ld%ld%ld%ld",
            &px,&py,&qx,&qy,&color);
            R[i].px=px;
            R[i].py=py;
            R[i].qx=qx;
            R[i].qy=qy;
            R[i].color=color;
        }
        R[0].qx=A;R[0].qy=B;R[0].color=1;
        for (i=n;i>=0;i--)
        {
            cur_c=R[i].color;
            compute(R[i].px,R[i].py,R[i].qx,R[i].qy,i);
        }
        for (i=1;i<MAX;i++)
            if (sq[i])
                fprintf(fo,"%ld %ldn",i,sq[i]);
        fclose(fi);
        fclose(fo);
        return 0;
    }
    
    

    C++ :

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    int map[1002][1002]={1};
    int co[2501]={0};
    int con[2501];
    int mm=0;
    int sign[2501]={0};
    int main(){
    	int a,b,n;
    	cin>>a>>b>>n;
    	con[0]=1;
    	sign[1]=1;
    	//memset(map,0,sizeof(map));
    	for(int i=1;i<=a;i++){
    		for(int j=1;j<=b;j++){
    			map[i][j]=1;
    		}
    	}
    	while(n--){
    		int llx,lly,urx,ury,color;
    		cin>>llx>>lly>>urx>>ury>>color;
    		if(!sign[color]){
    			sign[color]=++mm;//cout<<"color="<<color<<" mm="<<mm<<endl;
    			con[mm]=color;
    		}
    		
    		
    		for(int i=llx+1;i<=urx;i++){
    			for(int j=lly+1;j<=ury;j++){
    				map[i][j]=color;
    			}
    		}
    	}
    	for(int i=1;i<=a;i++){
    		for(int j=1;j<=b;j++){
    			cout<<map[i][j]<<" ";
    		}
    		cout<<endl;
    	}
    	for(int i=1;i<=a;i++){
    		for(int j=1;j<=b;j++){
    			co[map[i][j]]++;
    		}
    	}
    	sort(con,con+mm);
    	for(int i=0;i<=mm;i++){
    		cout<<con[i]<<" "<<co[con[i]]<<endl;
    	}
    	return 0;
    }
    

    Pascal :

    var i,j,k,m,x1,x2,y1,y2,x,y,n:longint;
        d,t:longint;
        a:array[0..11000,0..11000] of longint;
        c:array[0..2500] of longint;
    begin
     read(x,y,n);
     for i:=1 to x do
      for j:=1 to y do
       a[i,j]:=1;
     for i:=1 to n do
      begin
       read(x1,y1,x2,y2,k);
       for d:=x1+1 to x2 do
        for t:=y1+1 to y2 do
         a[d,t]:=k;
      end;
     for i:=1 to x do
      for j:=1 to y do
       inc(c[a[i,j]]);
     for i:=1 to 2500 do
      if c[i]<>0 then writeln(i,' ',c[i]);
    end.
    
    
    • 1

    Information

    ID
    19393
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By