70分,有注释,请大佬指导!
查看原帖
70分,有注释,请大佬指导!
1371856
AK74楼主2024/9/28 20:26
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;

short qipan[31][31];
int szyl,sta;//szyl存zyl出棋数,sta存【她】出棋数 

int main()
{
	int n,m;cin>>n>>m;
	char temp;
	for(int hang=1;hang<=n;hang++)
	{
		for(int lie=1;lie<=m;lie++)
		{
			cin>>temp;
			if(temp=='*'){
				qipan[hang][lie]=1;//1为【她】 
				sta++;
			}
			else if(temp=='$'){
				qipan[hang][lie]=2;//2为zyl
				szyl++;
			}
		}
	}//读取 
	
	int flag=0;//记录胜者 
	for(int hang=1;hang<=n;hang++)
	{
		if(flag!=0) break;
		for(int lie=1;lie<=m;lie++)
		{
			if(flag!=0) break;
			if(lie+4<=m){//包括该点可以往右数5个 
				int i=0;//用于判断是否有胜者 
				for(;i<5;i++)
					if(qipan[hang][lie]!=qipan[hang][lie+i]) break;
				if(i==5){//有胜者 
					flag=qipan[hang][lie];//记录胜者 
					break;
				}//横着 
				
				if(hang+4<=n){//包括该点可以往下数5个 
					for(;i<5;i++)
						if(qipan[hang][lie]!=qipan[hang+i][lie+i]) break;
					if(i==5){
						flag=qipan[hang][lie];
						break;
					}
				}//右下
			}
			
			if(hang+4<=n){
				int i=0;
				for(;i<5;i++)
					if(qipan[hang][lie]!=qipan[hang+i][lie]) break;
				if(i==5){
					flag=qipan[hang][lie];
					break;
				}//竖着
				
				if(lie-4>=1){
					for(;i<5;i++)
						if(qipan[hang][lie]!=qipan[hang+i][lie-i]) break;
					if(i==5){
						flag=qipan[hang][lie];
						break;
					}
				}//左下
			}	 
		}
	}
	if(flag!=0){//有胜者 
		if(flag==1) cout<<"Pleasing!";
		else cout<<"zylwins!";
	}
	else{
		if(szyl==sta) cout<<"W";
		else cout<<"Z";
	}
	return 0;
}
2024/9/28 20:26
加载中...