BoBolilla @ 2023-08-26 16:09:20
#include<iostream>
#include <cmath>
#include <algorithm>
#include <stack>
#include<vector>
#include<queue>
#include <cstring>
#include <iomanip>
#define endl "\n"
//#define LL long long
#define int long long
#define PII pair<int,int>
using namespace std;
int dx[4]={0,0,-1,1},dy[4]={-1,1,0,0};
const int N = 1010;
char g[N][N];
bool vis[N][N],flag;
int n;
void bfs(int x,int y)
{
queue<PII>q;
q.push({x,y});
while(q.size())
{
auto t=q.front();q.pop();
int tx=t.first;int ty=t.second;
vis[tx][ty]=1;
if(g[tx-1][ty]=='#'&&g[tx+1][ty]=='#'&&g[tx][ty-1]=='#'&&g[tx][ty+1]=='#') flag = 1;
for(int i=0;i<4;i++)
{
int xx=tx+dx[i],yy=ty+dy[i];
if(g[xx][yy]=='#'&&!vis[xx][yy])
{
q.push({xx,yy});
}
}
}
}
signed main() {
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin >> n;
for(int i=0;i<n;i++) cin >> g[i];
int ans=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(g[i][j]=='#'&&!vis[i][j])
{
flag=0;
bfs(i,j);
if(!flag) ans++;
}
}
}
cout << ans;
return 0;
}
不开O2tle,开O2mle 只有36分
by Lv_Boxiu @ 2023-08-26 16:36:24
N≤1000;
N*N=1000000;
考虑极端情况
TLE:
考虑极端情况
共遍历1000000-3996次;
每次至少26个命令;
考虑到向外遍历;
平均100余条;
洛谷机子一秒1亿次;
MLE:
考虑极端情况
共498002次
共498002个队列、 498002个auto、 2988012个int。
不超才怪
by Lv_Boxiu @ 2023-08-26 16:36:52
@BoBolilla
by zhangshuhang2011 @ 2023-08-26 16:37:10
估计是出队的速度没有入队的快,然后队列MLE了
by BoBolilla @ 2023-08-28 17:42:07
@Lv_Boxiu 好滴我还是用DFS吧,,,