求助分析时间复杂度,3AC,7TLE
  • 板块P1141 01迷宫
  • 楼主cherubim
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/11/15 11:04
  • 上次更新2023/11/4 00:30:54
查看原帖
求助分析时间复杂度,3AC,7TLE
347813
cherubim楼主2021/11/15 11:04

RT,lz认为此代码的时间复杂度为 O(n2+m)O(n^2+m) , 但是7TLE,时间复杂度貌似假了

#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
const int MAXN = 100010 ;
inline int read(){
    int x=0,w=1;char c=getchar();
    while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}
    while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar();
    return x*w;
}
const int posx[10]={0,1,0,-1,0};
const int posy[10]={0,0,1,0,-1};
int n,m,cnt[1010][1010],ans[1000010];
char mapp[1010][1010];
bool vis[1010][1010];
inline bool check(int x,int y){
	return (x>=1&&x<=n&&y>=1&&y<=n);
}
inline void bfs(int sx,int sy,int step){
	queue<pair<int,int>> q;
	q.push(make_pair(sx,sy));
	while(!q.empty()){
		int nowx=q.front().fi,nowy=q.front().se;
		q.pop();
		vis[nowx][nowy]=true;
		cnt[nowx][nowy]=step;
		for(int i=1;i<=4;++i){
			int tox=nowx+posx[i],toy=nowy+posy[i];
			if(!vis[tox][toy]&&mapp[tox][toy]!=mapp[nowx][nowy]&&check(tox,toy))
				q.push(make_pair(tox,toy));
		}
	}
}
int main ( ) {
    n=read();m=read();
    for(int i=1;i<=n;++i)
        scanf("%s",mapp[i]+1);
    int rep=0;
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			if(!vis[i][j])
				bfs(i,j,++rep);
	for(int i=1;i<=n;++i)
		for(int j=1;j<=n;++j)
			++ans[cnt[i][j]];
//	for(int i=1;i<=n;++i,putchar('\n'))
//		for(int j=1;j<=n;++j)
//			printf("%d ",cnt[i][j]);
	while(m--){
		int aa=read(),bb=read();
		printf("%d\n",ans[cnt[aa][bb]]);
	}
    return 0 ; 
}
2021/11/15 11:04
加载中...