CSP CCF 201512-2 消除类游戏 C++满分题解

解题思路:

1.用两个矩阵来存储原始值,其中一个永远不改变,只用来判断,这样可以防止消除某一行或某一列后影响其它行或列

2.记录下每一行每个数字出现的次数和每一列每一个数字出现的次数。

3.只有当某一行或某一列的某个数出现次数大于等于3,才需要判断是否需要消除,否则直接跳过。

4.每一行和每一列需要消除的地方可能不止一处,需要进行多次判断。

CSP CCF 201512-2 消除类游戏 C++满分题解_第1张图片

#include
using namespace std;

int main()
{
	int n,m;
	cin>>n>>m;
	int arr[31][31]={0};  //只用来判断,永远不改变
	int arr2[31][31];      //用来输出,防止消除一次后,某一个数变成0,影响其它行列
	int visith[31][10]={0};   //标记数组,记录每一行每个取值有几个
	int visitl[31][10]={0};   //标记数组,记录每一列每个取值有几个
	for(int i=0;i>arr[i][j];
			arr2[i][j]=arr[i][j];
			visith[i][arr[i][j]]++;
			visitl[j][arr[i][j]]++;
		}
	}
	for(int i=0;i=3)  //只有大于等于3,才需要判断
			{
				int t=0;   //计算有几个等于j的数
				int pos=0;   //开始消除的位置
				for(int k=0;k=3&&(arr[i][k]!=j||k==m-1))   //需要消除的条件
					{
						for(int tm=pos;tm=3)
			{
				int t=0;
				int pos=0;
				for(int k=0;k=3&&(arr[k][i]!=j||k==n-1))
					{
						for(int tm=pos;tm

你可能感兴趣的:(csp的刷题之路,c++,数据结构,算法,游戏)