#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.