- #include<stdio.h>
- #include<stdlib.h>
- #include<math.h>
- int X, Y, N, x, y, w, h;
- int inj=0;
- void boom(int,int,int);
- int hori,vert;
- int range(int);
- int max(int,int);
- int min(int,int);
- int main()
- {scanf("%d%d%d%d%d%d%d", &X, &Y, &N, &x, &y, &w, &h);
- boom(N,X,Y);
- printf("%d",inj);
- return 0;
- }
- void boom(int force,int midx,int midy)
- {hori=min(midx+force/2,x+w)-max(x,midx-force/2)+1;
- if(hori<0)
- hori=0;
- vert=min(midy+force/2,y+h)-max(y,midy-force/2)+1;
- if(vert<0)
- vert=0;
- inj+=force*hori*vert;
- if(force>2)
- {if(midx+range(force)>=x)
- boom(force/2,midx+force/4*3,midy);
- if(midx-range(force)<=x+w)
- boom(force/2,midx-force/4*3,midy);
- if(midy+range(force)>=y)
- boom(force/2,midx,midy+force/4*3);
- if(midy-range(force)<=y+h)
- boom(force/2,midx,midy-force/4*3);
- }
- }
- int range(int pair)
- {int exp=0;
- while(pair>1)
- {pair=pair/2;
- exp=exp+1;
- }
- return 2*(pow(2,exp)-1);
- }
- int max(int a,int b)
- {if(a>b)
- return a;
- else
- return b;
- }
- int min(int a,int b)
- {if(a<b)
- return a;
- else
- return b;
- }
Raw Paste