【枚举】LAGNO(jzoj 1149)
生活随笔
收集整理的這篇文章主要介紹了
【枚举】LAGNO(jzoj 1149)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
LAGNO
題目大意:
給你一個(gè)8×8的矩陣,里面有黑棋(B),白棋(W),還有一些格子沒棋子(.),當(dāng)兩個(gè)黑棋在同一條直線上,并且他們之間全是白棋(不能沒棋子),那么他們兩個(gè)黑棋可以使他們之間的白棋變黑,但棋子變黑后不能去將其他棋子變黑,問在空位放一顆黑棋最多可以使多少顆白棋變黑
樣例輸入
…
…
…
…BW…
…WB…
…
…
…
樣例輸出
1
解題思路:
先枚舉每一個(gè)位置,如果是白棋就判斷它的各個(gè)方向是否有黑棋,如果有黑棋,就往反方向延伸,是白棋就ans++,繼續(xù)延伸,當(dāng)不是白棋是就將這個(gè)位置記為ans,最后枚舉一遍,判斷是否為空,如果為空,就求最大值
#include<cstdio> #include<iostream> #include<cstring> using namespace std; const int dx[8]={1,1,0,-1,-1,-1,0,1};//八個(gè)方向 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)//八個(gè)方向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); } 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的【枚举】LAGNO(jzoj 1149)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019.01.28【NOIP普及组】模
- 下一篇: 本地化和国际化测试什么是本地化测试