Beispiel #1
0
double get_per(window x){ //recursion is very important  though
       int i,j; 
       window temp1=x,temp2=x;
       for(i=1;i<=62;i++)
           if(base[i].valid==1&&base[i].rank>x.rank&&!(x.x1>=base[i].x2||x.x2<=base[i].x1||x.y1>=base[i].y2||x.y2<=base[i].y1)){
               if(base[i].y2<x.y2){
                   temp1.y1=base[i].y2;
                   temp2.y2=base[i].y2;
                   return get_per(temp1)+get_per(temp2);
                   }
               if(base[i].y1>x.y1){
                   temp1.y1=base[i].y1;
                   temp2.y2=base[i].y1;
                   return get_per(temp1)+get_per(temp2);
                   }
               if(base[i].x1>x.x1){
                   temp1.x2=base[i].x1;
                   temp2.x1=base[i].x1;
                   return get_per(temp1)+get_per(temp2);
                   }
               if(base[i].x2<x.x2){
                   temp1.x2=base[i].x2;
                   temp2.x1=base[i].x2;
                   return get_per(temp1)+get_per(temp2);
                   }
               return 0;
               }
       return (x.x2-x.x1)*(x.y2-x.y1);
       }
Beispiel #2
0
int main(){
     fin=fopen("window.in","r");
     fout=fopen("window.out","w");
     int i,j,k,x1,y1,x2,y2,num;
     char x;
     int top=0,buttom=0;
     for(i=1;i<=62;i++)
         base[i].valid=0;
     while(1){
         x=fgetc(fin);
         fgetc(fin);
         num=convert(fgetc(fin));
         switch(x){
             case 'w':
                  fgetc(fin);
                  fscanf(fin,"%d",&x1);
                  fgetc(fin);
                  fscanf(fin,"%d",&y1);
                  fgetc(fin);
                  fscanf(fin,"%d",&x2);
                  fgetc(fin);
                  fscanf(fin,"%d",&y2);
                  base[num].x1=(x1<x2?x1:x2);
                  base[num].x2=(x1>x2?x1:x2);
                  base[num].y1=(y1<y2?y1:y2);
                  base[num].y2=(y1>y2?y1:y2);
                  base[num].valid=1;
                  base[num].rank=++top;
                  break;
             case 't':
                  base[num].rank=++top;
                  break;
             case 'b':
                  base[num].rank=--buttom;
                  break;
             case 'd':
                  base[num].valid=0;
                  break;
             case 's':
                  //fprintf(fout,"%d",base[num].rank);
                  fprintf(fout,"%.3f\n",get_per(base[num])*100/((base[num].x2-base[num].x1)*(base[num].y2-base[num].y1)));
                  break;
             default:
                     break;
             }
         fgetc(fin);
         if(fgetc(fin)==EOF)
             break;
         }
     return 0;
    }
Beispiel #3
0
int Character::ranged_per_mod() const
{
    ///\EFFECT_PER <12 increases ranged penalty
    return std::max( ( 12 - get_per() ) * 15, 0 );
}