View Code of Problem 1059

#include<iostream>

using namespace std;


int main(){
	int n,ro,co,st,a,b,pr,pc,text,num;
	cin>>n;
	while(n>0){
		--n;
		num=0;
		cin>>ro>>co>>st;
		int **f = new int*[ro];	//分配一位数组
		for(a=0; a<ro; a++){   //分配二维数组
				f[a] = new int[co];
		}
		for(a=0; a<ro; a++){   //数组初始化
			for(b=0; b<co; b++)
				f[a][b] = 0;
		}

		for(a=0; a<st; a++){    //数组石头位置标记
			cin>>pr>>pc;
			f[pr-1][pc-1] = 1;
		}

		for(a=0; a<ro; a++){    //数组按行计算可行位置数量
			text = 0;
			for(b=0; b<co; b++){
				if(f[a][b] == 0){
					++text;
				}
				else{
					if(text>1){
						++num;
					}
					text=0;
				}
			}
			if(text>1){
				++num;
			}
		}

		for(b=0; b<co; b++){     //数组按列计算可行位置数量
			text=0;
			for(a=0; a<ro; a++){
				if(f[a][b] == 0){
					++text;
				}
				else{
					if(text>1){
						++num;
					}
					text=0;
				}
			}
			if(text>1){
				++num;
			}
		}
		cout<<num<<endl;
		for(a=0; a<ro; a++){   //删除一位数组
				delete[] f[a];
		}
		delete [] f;          //删除二维数组
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 1059