POJ 1434 Fill the Cisterns!

POJ 1434 Fill the Cisterns!

回家待了几天,我觉得再继续颓废下去也不是个办法。还是得他妈的振作!振作!
跟以前一样,按照计划行事。
每天2题,难度随意。做不出来绝对不死磕,找标程或者数据弄懂再说。管他妈什么算法,我只管写代码。
项目紧的时候做项目,不紧的时候看点代码或者写点代码,啥都行,主要是保持一个感觉。
剩下的时间就练吉他。

今天开始做了第一题,结果悲剧。
我日你妈poj,能不能不要他妈的加数据,为啥子官方数据都过了还是过不了你那的。。

#include  < stdio.h >
#include 
< stdlib.h >

#define  MAX_N 50032

int  K, N, V;
struct  node {
    
int   base , area, sign;
};

struct  node arr[MAX_N * 2 ];

int  cmp( const   void   * a,  const   void   * b)
{
    
return  (( struct  node  * )a) -> base   -  (( struct  node  * )b) -> base ;
}

int  main()
{
    
int  b, h, w, d, i, a, v;

    scanf(
" %d " & K);
    
while  (K -- ) {
        scanf(
" %d " & N);
        
for  (i  =   0 ; i  <  N; i ++ ) {
            scanf(
" %d%d%d%d " & b,  & d,  & w,  & h);
            arr[i
* 2 ]. base   =  b;
            arr[i
* 2 ].area  =  w  *  h;
            arr[i
* 2 ].sign  =   1 ;
            arr[i
* 2   +   1 ]. base   =  b  +  d;
            arr[i
* 2   +   1 ].area  =  w  *  h;
            arr[i
* 2   +   1 ].sign  =   - 1 ;
        }
        scanf(
" %d " & V);
        qsort(arr, N
* 2 sizeof (arr[ 0 ]), cmp);

        a 
=   0 ;
        
for  (i  =   0 ; i  <  N * 2 ; i ++ ) {
            v 
=  i  ?  a  *  (arr[i]. base   -  arr[i  -   1 ]. base ) :  0 ;
            
if  (V  <=  v) {
                printf(
" %.2lf\n " , ( double )V  /  a  +  arr[i  -   1 ]. base );
                
break ;
            }
            V 
-=  v;
            a 
+=  arr[i].sign  *  arr[i].area;
        }
        
if  (i  ==  N * 2 )
            printf(
" OVERFLOW\n " );
    }

    
return   0 ;
}


你可能感兴趣的:(POJ 1434 Fill the Cisterns!)