蒟蒻求助qwq
查看原帖
蒟蒻求助qwq
172517
鸡蛋糕楼主2020/7/24 10:18
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=550,MAX=0x7fffffffffffffff;
int n,m,a[N][N],b[N][N],d[N],ans;
int aa[]={1,-1,0,0},bb[]={0,0,1,-1};
int k;
struct nb{
	int L,R;
}c1[N],c2[N];
bool cmp(const nb &x,const nb &y)
{
	if(x.L==y.R)
	{
		return x.R>y.R;
	}
	return x.L<y.L;
}
void dfs(int x,int y,int xsc)
{
	b[x][y]=1;
	if(x==n)
	{
		d[y]=1;
		c1[xsc].L=min(c1[xsc].L,y);
		c1[xsc].R=max(c1[xsc].R,y);
	}
	for(int i=0;i<4;i++)
	{
		int xx=x+aa[i],yy=y+bb[i];
		if(xx<=n && yy<=m && xx>=1 && yy>=1 && a[xx][yy]<a[x][y] && !b[xx][yy])
		{
			dfs(xx,yy,xsc);
		}
	}
}
int main()
{
	scanf("%d %d",&n,&m);
	for(int i=1;i<=m;i++)
	{
		c1[i].L=MAX;
		c1[i].R=-1;
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			scanf("%d",&a[i][j]);
		}
	}
	for(int i=1;i<=m;i++)
	{
		if((a[1][i]>=a[1][i-1]) && (a[1][i]>=a[1][i+1]))
		{
			dfs(1,i,i);
		}
		memset(b,0,sizeof(b));
	}
	int p=0;
	for(int i=1;i<=m;i++)
	{
		if(d[i]==0)
		{
			p++;
		}
	}
	if(p==1)
	{
		printf("0\n%d",p);
	}
	else
	{
		printf("1\n");
		for(int i=1;i<=m;i++)
		{
			if(c1[i].L!=MAX && c1[i].R!=0)
			{
				k++;
				c2[k].L=c1[i].L;
				c2[k].R=c1[i].R;
			}
		}
		sort(c2+1,c2+k+1,cmp);
		int left=1;
		while(left<=m)
		{
			int maxr=0;
			for(int i=1;i<=k;i++)
			{
				if(c2[i].L<=left)
				{
					maxr=max(maxr,c1[i].R);
				}
				else
				{
					break;
				}
			}
			ans++;
			left=maxr+1;
		}
		printf("%d\n",ans);
	}
	
	return 0;
}

为啥这么写会全部测试点TLE啊,各位大佬。

2020/7/24 10:18
加载中...