1. 程式人生 > 實用技巧 >BFS,字串,寫在院賽之後

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