求助分析时间复杂度
  • 板块灌水区
  • 楼主ShunpowerSHUN理成张
  • 当前回复4
  • 已保存回复4
  • 发布时间2022/3/12 00:37
  • 上次更新2023/10/28 06:49:20
查看原帖
求助分析时间复杂度
399150
ShunpowerSHUN理成张楼主2022/3/12 00:37

CF 2B:

//Author:Zealous_YH
#include <bits/stdc++.h>
#define ET return 0
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ll long long
#define ull unsigned long long
#define bk break
#define ctn continue
#define inf INT_MAX
#define uinf INT_MIN
#define prq priority_queue
#define vr vector
#define pii pair<int,int>
#define pll pair<ll,ll>
#define debug puts("--------Chery AK IOI--------");
#define Yes cout<<"Yes"<<endl;
#define No cout<<"No"<<endl;
#define pt puts("")
#define efor(i,x) for(int i=head[x];i;i=edge[i].nex)
#define fr1(i,a,b) for(int i=a;i<=b;i++)
#define fr2(i,a,b) for(int i=a;i>=b;i--)
#define fv(i,p) for(int i=0;i<p.size();i++)
#define ld long double
#define S setiosflags(ios::fixed)<<setprecision(2)
using namespace std;
const int N=1e5+10;
int edgecnt=1;
int maxn=uinf,minn=inf;
//struct Edge{
//	int toe,val,nex;
//} edge[N];
//int head[N];
//int low[N],dfn[N],vis[N],sccnum[N];
//int tnt,tot;
//void add(int x,int y,int w){
//	edge[edgecnt].toe=y;
//	edge[edgecnt].val=w;
//	edge[edgecnt].nex=head[x];
//	head[x]=edgecnt++;
//}
int lowbit(int x){
	return x&-x;
}
inline void read(int &x){
   int s=0,w=1;
   char ch=getchar();
   while(ch<'0'||ch>'9'){
   		if(ch=='-'){
			w=-1;
   		}
        ch=getchar();
	}
   while(ch>='0'&&ch<='9'){
   		s=s*10+ch-'0';
		ch=getchar();
   }
   x=s*w;
}
inline void write(int x){
    if(x<0){
        putchar('-');
        x=-x;
    }
    if(x>9){
    	write(x/10);
	}
    putchar(x%10+'0');
}
int t;
char a[110][110];
bool vis[110][110];
int dx[]={1,0,-1,0},dy[]={0,1,0,-1};
int n,m;
int t1,t2;
void dfs(int x,int y,int &l1,int &l2,int &r1,int &r2){
	vis[x][y]=1;
	
	fr1(i,0,3){
		if(x+dx[i]<1||x+dx[i]>n||y+dy[i]<1||y+dy[i]>m||a[x+dx[i]][y+dy[i]]=='0'){
			ctn;
		}
		if(!vis[x+dx[i]][y+dy[i]]){
			l1=min(l1,x+dx[i]);
			l2=min(l2,y+dy[i]);
			r1=max(r1,x+dx[i]);
			r2=max(r2,y+dy[i]);
			dfs(x+dx[i],y+dy[i],l1,l2,r1,r2);
		}
	}
}
void solve(){
//	int n,m;
	memset(vis,0,sizeof(vis));
	cin>>n>>m;
	fr1(i,1,n){
		fr1(j,1,m){
			cin>>a[i][j];
		}
	}
	fr1(i,1,n){
		fr1(j,1,m){
			if(a[i][j]=='1'&&!vis[i][j]){
				int l=i,r=j;
				int x=i,y=j;
				dfs(i,j,l,r,x,y);
//				cout<<l<<" "<<r<<" "<<x<<" "<<y<<endl;
				fr1(k,l,x){
					fr1(p,r,y){
						if(a[k][p]=='0'){
							puts("No");
							return;
						}
					}
				}
			}
		}
	}
	puts("Yes");
}
int main(){
	cin>>t;
	while(t--){
		solve();
	}
	ET;
}
//Teens-in-Times
//HJL 2004.06.15
//Everything For Ji.

现在的问题是,这份代码能不能过,好怕 fst。
2022/3/12 00:37
加载中...