usaco 3.1 rect1 2008.7.18

来源:互联网 发布:防伪花纹制作软件 编辑:程序博客网 时间:2024/06/03 08:39

usaco 3.1 rect1 2008.7.18

{过了前十组,最后一组超强数据,过不了,如果要过的话,需要很大的空间,但是,占用的空间太大,则不予以测评}

{

ID:  

PROG: rect1

LANG: PASCAL

}


program p_rect1;const fin='rect1.in';fout='rect1.out';          maxab=1000;maxn=100;var sum:array[1..100]of longint;      x:array[1..maxn,1..2]of longint;      y:array[1..maxn,1..2]of longint;      map:array[0..maxab,0..maxab]of boolean;      t:array[1..maxn]of 1..4;      f1,f2:text;      a,b,n,o:longint;procedure init;   var i:longint;    begin      assign(f1,fin);reset(f1);assign(f2,fout);rewrite(f2);      read(f1,a,b,n);      for i:=1 to n do         begin            read(f1,x[i,1],x[i,2],y[i,1],y[i,2],t[i]);            dec(y[i,1]);dec(y[i,2]);         end;    end;procedure doit;var i,j,k,s:longint;begin   fillchar(map,sizeof(map),true);   o:=a*b;   fillchar(sum,sizeof(sum),0);   for i:=x[n,1] to y[n,1] do     for j:=x[n,2] to y[n,2] do       map[i,j]:=false;   inc(sum[t[n]],(y[n,1]-x[n,1]+1)*(y[n,2]-x[n,2]+1));   if t[n]<>1 then dec(o,(y[n,1]-x[n,1]+1)*(y[n,2]-x[n,2]+1));   writeln(o);   for k:=n-1 downto 1 do      begin         s:=0;         for i:=x[k,1] to y[k,1] do            for j:=x[k,2] to y[k,2] do              if map[i,j] then begin inc(s);map[i,j]:=false;end;         inc(sum[t[k]],s);         if t[k]<>1 then dec(o,s);      end; end; procedure print; var i:longint; begin    if o<>0 then writeln(f2,'1 ',o);    for i:=2 to 100 do      if sum[i]<>0 then      writeln(f2,i,' ',sum[i]);end; {----------------------------------------------} begin    init;    doit;    print;    close(f1);close(f2); end.


0 0
原创粉丝点击