CPP   26
boom
Guest on 20th September 2023 12:14:09 AM


  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<math.h>
  4. int X, Y, N, x, y, w, h;
  5. int inj=0;
  6. void boom(int,int,int);
  7. int hori,vert;
  8. int range(int);
  9. int max(int,int);
  10. int min(int,int);
  11. int main()
  12.    {scanf("%d%d%d%d%d%d%d", &X, &Y, &N, &x, &y, &w, &h);
  13.     boom(N,X,Y);
  14.     printf("%d",inj);
  15.         return 0;  
  16.    }
  17. void boom(int force,int midx,int midy)
  18.    {hori=min(midx+force/2,x+w)-max(x,midx-force/2)+1;
  19.     if(hori<0)
  20.        hori=0;
  21.         vert=min(midy+force/2,y+h)-max(y,midy-force/2)+1;
  22.     if(vert<0)
  23.        vert=0;
  24.         inj+=force*hori*vert;
  25.         if(force>2)
  26.           {if(midx+range(force)>=x)
  27.            boom(force/2,midx+force/4*3,midy);
  28.            if(midx-range(force)<=x+w)
  29.            boom(force/2,midx-force/4*3,midy);
  30.            if(midy+range(force)>=y)
  31.            boom(force/2,midx,midy+force/4*3);
  32.            if(midy-range(force)<=y+h)
  33.            boom(force/2,midx,midy-force/4*3);
  34.           }            
  35.    }
  36. int range(int pair)
  37.    {int exp=0;
  38.         while(pair>1)
  39.         {pair=pair/2;
  40.          exp=exp+1;
  41.         }
  42.    return 2*(pow(2,exp)-1);
  43.    }
  44. int max(int a,int b)
  45.         {if(a>b)
  46.                 return a;
  47.          else
  48.                 return b;
  49.         }
  50. int min(int a,int b)
  51.         {if(a<b)
  52.                 return a;
  53.          else
  54.                 return b;
  55.         }

Raw Paste

Login or Register to edit or fork this paste. It's free.