1 solutions
-
0
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