Rectangle Cutting

Time Limit: 1.0 Seconds   Memory Limit: 65536K

In the small historical village of Basinia, there is a popular activity in wedding ceremonies called rectangle cutting. During this activity, each close relative of the bride comes and cuts a rectangle in the wedding cake (but does not take a piece). The cake has a rectangular shape. The problem is to count how many pieces are in the cake after rectangle-cutting.

For example, in the following figure, the cake size is 3×5, and three people have made rectangular cuts in it. As a result, the cake is cut into six pieces.

Each rectangular cut is specified by the (x, y) coordinates of its two opposite corners. The input for the above figure can be found in the first sample input. As there are large families in Basinia, the number of pieces may be large and we need a computer program to compute it.


The input contains several test cases. Each test has several lines. The first line has two integers w (1 ≤ w ≤ 20) and h (1 ≤ h ≤ 20) which are the width and height of the cake. The second line contains a single integer n (0 ≤ n ≤ 50) which is the number of people who cut rectangles in the cake. After this, there are n lines each containing the integers x1, y1, x2, y2 which are the coordinates of two opposite corners of the cut. You may assume 0 ≤ x1, x2w and 0 ≤ y1, y2h. The last line of the input is a line containing two zeros.


For each test case, write the number of pieces the cake is cut into.

Sample Input

3 5
1 1 3 2
4 0 2 3
4 0 5 1
6 6
2 0 5 3
3 1 4 2
0 0

Sample Output

于数据量比较小的情况)。同时此题应注意w 和 h 的顺序,我在这里耽误了好久,还wa了一次。
Source Code

3338  User: wic 
Memory: 272K  Time: 0MS 
Language: C
++  Result: Accepted 

Source Code 
using namespace std;
int a[25][25];
int mark=-1,k;
int  w,h;
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int power(int a, int b)//pow的返回值类型不是int,于是自己写了一个函数
int ans=1;
return ans;


bool inside(int x, int y)
if(x<=&& x>0 && y<=&& y>0)
return true;
return false;

void dfs(int x, int y)//自己写的深搜,嘿嘿
for(int i=0; i<4; i++){
int xx=x+dir[i][0];
int yy=y+dir[i][1];
if(inside(xx,yy) && a[yy][xx]!=mark && a[yy][xx]==k){



int main()
int i,j,n,x1,y1,x2,y2,maxx,maxy,minx,miny,m;
while(cin>>w>>&& w && h){
int c=0;
int count=0;
for(i=miny+1; i<=maxy; i++)
for(j=minx+1; j<=maxx; j++)

for(k=0; k<m; k++){
for(i=1; i<=w;  i++)
for(j=1; j<=h; j++)
{    dfs(j,i); count++;}


return 0;