LAGNO
题目大意:
给你一个8×8的矩阵,里面有黑棋(B),白棋(W),还有一些格子没棋子(.),当两个黑棋在同一条直线上,并且他们之间全是白棋(不能没棋子),那么他们两个黑棋可以使他们之间的白棋变黑,但棋子变黑后不能去将其他棋子变黑,问在空位放一颗黑棋最多可以使多少颗白棋变黑
样例输入
…
…
…
…BW…
…WB…
…
…
…
样例输出
1
解题思路:
先枚举每一个位置,如果是白棋就判断它的各个方向是否有黑棋,如果有黑棋,就往反方向延伸,是白棋就ans++,继续延伸,当不是白棋是就将这个位置记为ans,最后枚举一遍,判断是否为空,如果为空,就求最大值
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int dx[8]={1,1,0,-1,-1,-1,0,1};//八个方向
const int dy[8]={0,1,1,1,0,-1,-1,-1};
int h,l,sum,maxx,f[15][15],a[15][15];
char x;
int main()
{for (int i=1;i<=8;++i)for (int j=1;j<=8;++j){cin>>x;if (x=='W') f[i][j]=2;//记录if (x=='B') f[i][j]=1;}for (int i=1;i<=8;++i)for (int j=1;j<=8;++j)if (f[i][j]==2)//白棋for (int k=0;k<8;++k)//八个方向if (f[i+dx[k]][j+dy[k]]==1)//判断是否为黑棋{h=i+dx[(k+4)%8];//反向走一步(行)l=j+dy[(k+4)%8];//列sum=1;//自己while (f[h][l]==2)//是白棋子{h+=dx[(k+4)%8];//再走l+=dy[(k+4)%8];sum++;//记录}a[h][l]+=sum;//累加}for (int i=1;i<=8;++i)for (int j=1;j<=8;++j)if (!f[i][j])//没棋子,可以放maxx=max(maxx,a[i][j]);//求最大的printf("%d",maxx);
}