PKU3327

WA了N次...
#include < string .h >
#include 
< stdio.h >

struct  Rect
{
    
int w, d;
}
;

int  c, w, d, cnt, p, s;
Rect rect[
110 ];
int  area[ 110 ];

void  cut()
{
    
int hw=rect[p].w, hd=rect[p].d ;
    s
%=(2*(hw+hd));
    rect[cnt]
=rect[p];
    
if(s>0 && s<hw)
    
{
        rect[p].w
=s,rect[p].d=hd;
        rect[cnt].w
=hw-rect[p].w;
    }

    
if(s>hw && s<hw+hd)
    
{
        rect[p].w
=hw,rect[p].d=s-hw;
        rect[cnt].d
=hd-rect[p].d;
    }

    
if(s>hw+hd && s<2*hw+hd)
    
{
        rect[p].w
=s-hw-hd,rect[p].d=hd;
        rect[cnt].w
=hw-rect[p].w;
    }

    
if(s>2*hw+hd && s<2*hw+2*hd)
    
{
        rect[p].w
=hw,rect[p].d=s-2*hw-hd;
        rect[cnt].d
=hd-rect[p].d;
    }

    
//
    if(rect[p].w * rect[p].d > rect[cnt].d * rect[cnt].w)
    
{
        Rect hr
=rect[p];
        rect[p]
=rect[cnt];
        rect[cnt]
=hr;
    }
      Rect hr1=rect[p];
      int i;
      for(i=p;i<cnt-1;i++)
          rect[i]=rect[i+1];
      rect[cnt-1]=hr1;

}


int  main()
{
    
while(scanf("%d%d%d"&c, &w, &d)==3)
    
{
        
        
        
if(c==0 && w==0 && d==0)break;
        cnt
=1;
        
int i, j; 
        
for(i=0;i<110;i++)
            rect[i].d
=rect[i].w=area[i]=0;

        rect[
1].w=w,rect[1].d=d;

        
for(i=1;i<=c;i++)
        
{
            scanf(
"%d%d",&p,&s);
            cnt
++;
            cut();
        }

        
for(i=1;i<=c+1;i++)
        
{
        
//    printf("%d :  %d , %d  \n",i,rect[i].w,rect[i].d);
            int harea=rect[i].w * rect[i].d;
            
for(j=i;j>=1;j--)
            
{
                area[j]
=area[j-1];
                
if(harea>area[j])
                
{
                    area[j]
=harea;
                    
break;
                }

            }

        }


        
for(i=1;i<=c+1;i++)
        
{
            
if(i!=1)printf(" ");
            printf(
"%d",area[i]);
        }

        printf(
"\n");
    }

    
return 0;
}

转载于:https://www.cnblogs.com/SQL/archive/2007/10/02/913090.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值