BFS,字符串,写在院赛之后

这天洛谷打卡是大凶,愣是没有想到真的是大凶

先开了道树的题目,愣是半天以为是并查集,结果第一题简单字符串也TM的抽了没做出来,最后一题用BFS做结果行列n,m写反过不了

题目,简单字符串:

题目懒得抄了,就TM的给两段字符串看移位,如234567891和123456789

就他妈的不知道字符串find,直接第一个字符串加自己,变成两倍,然后就可以查找第二段字符串在不在第一段里面(已给定长度相等)

就尼玛的三句话:1.s+=s;2.if(s.find(s2)!=string::npos) cout<<"YES";else cout<<"NO";3.我是傻逼;

字符串的x,y比不是坐标轴里的x,y,是他妈的行列,结果判断出界反了,****

#include <bits/stdc++.h>
using namespace std;
const int N=2e3+10;
char g[N][N];
typedef pair<int,int> pii;
queue<pii> q;
int drex[4]={0,0,-1,1};
int drey[4]={-1,1,0,0};
int n,m;
int cnt;
void bfs(int i,int j)
{
    q.push({i,j});
    g[i][j]='0';
    while(q.size())
    {
        auto t=q.front();
        q.pop();
        for(int i=0;i<=3;i++)
        {
            int x=t.first+drex[i],y=t.second+drey[i];
            if(x>=1&&x<=n&&y>=1&&y<=m&&g[x][y]>='1'&&g[x][y]<='9')
            {
                g[x][y]='0';
                q.push({x,y});
            }
        }
    }
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>g[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(g[i][j]>='1'&&g[i][j]<='9')
            {
                bfs(i,j);
                cnt++;
            }
        }
    }
    cout<<cnt;
} 

我无话可说,我是five

posted @ 2020-12-21 12:55  我要就问一就问一句  阅读(84)  评论(0)    收藏  举报