View Code of Problem 1059

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef struct array
{
	int x;
	int y;
}arr;

bool cmpx(arr a, arr b) {
    if(a.x == b.x) return a.y < b.y;
    else return a.x < b.x;
}

bool cmpy(arr a, arr b) {
    if(a.y == b.y) return a.x < b.x;
    else return a.y < b.y;
}

int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		arr a[140000] = {0};
		memset(&a,0,sizeof(arr));
		int m,n,k;
		int i,j,sum = 0,bleg = 0;
		scanf("%d %d %d",&m,&n,&k);
		for(i=0;i<k;i++)
		{
			scanf("%d %d",&a[i].x,&a[i].y);
		}

		sort(a,a+k,cmpx);

		/*for(i=0;i<k;i++)
		{
				printf("%d %d\n",a[i].x,a[i].y);
		}
		printf("\n");*/
		for(i=1;i<=n;i++)
		{
			bleg = 0;
			for(j=0;j<k;j++)
				if(i == a[j].y) { bleg = 1; break;}
			 if(bleg == 0 && m>1) sum++;
		}
		//printf("0// %d\n",sum);
		for(i=1;i<=m;i++)
		{
			bleg = 0;
			for(j=0;j<k;j++)
				if(i == a[j].x) {bleg = 1;break;}
			 if(bleg == 0 && n>1) sum++;
		}
		//printf("1// %d\n",sum);
		for(i=0;i<k;i++)
		{
			if(i == 0)
			{
				if(a[i].y - 1 >= 2) sum++;
			}
			if(a[i].x != a[i-1].x && i>0)
			{
				if(a[i].y - 1 >= 2) sum++;
			}
			if(a[i].x != a[i+1].x)
			{
				if(m - a[i].y >= 2) sum++;
			}
			else
			{
				if(a[i+1].x - a[i].x > 2) sum++;
			}
		}
		//printf("hang %d\n",sum);
		sort(a,a+k,cmpy);

		/*for(i=0;i<k;i++)
		{
				printf("%d %d\n",a[i].x,a[i].y);
		}*/

		for(i=0;i<k;i++)
		{
			if(i == 0)
			{
				if(a[i].x - 1 >= 2) sum++;
			}
			if(a[i].y != a[i-1].y && i>0)
			{
				if(a[i].x - 1 >= 2) sum++;
			}
			if(a[i].y != a[i+1].y)
			{
				if(m - a[i].x >= 2) sum++;
			}
			else if(a[i].y == a[i+1].y)
			{
				if(a[i+1].x- a[i].x > 2) sum++;
			}
			//printf("sum %d = %d\n",i,sum);
		}
        printf("%d\n",sum);
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 1059