求助!
  • 板块题目总版
  • 楼主崔化博
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/3/12 15:57
  • 上次更新2023/11/5 02:10:40
查看原帖
求助!
304524
崔化博楼主2021/3/12 15:57

P1434 第一个点WA,第二个点TLE

#include <iostream>
#include <climits>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
namespace io
{
	const int size=(1<<20)+1;
	char buf[size],*p1=buf,*p2=buf;
	inline char gc(){if(p1!=p2){return *p1++;} return p1==(p2=(p1=buf)+fread(buf,1,size-1,stdin))?EOF:*p1++;}
#ifndef ONLINE_JUDGE
#define gc getchar
#endif
#define pc putchar
	inline void read(int &x){x=0;int f=1;char c;while((c=gc())<'0' || c>'9'){if(c=='-'){f=-1;}}while(c>='0' && c<='9'){x=x*10+c-'0',c=gc();}x*=f;}
	inline void write(int x){if(x==0){pc('0');return;}if(x<0){x=-x;pc('-');}char s[100];int cnt=0;while(x){s[++cnt]=x%10+'0',x/=10;}while(cnt){pc(s[cnt]),--cnt;}}
}using namespace io;
int xy[4][2]= {{1,0},{0,1},{-1,0},{0,-1}},r,c,a[105][105]= {INT_MAX},ans,maxx,minn=INT_MAX,f[105][105];
void dfs(int x,int y) {
	
	
	if(a[x][y]==minn) {
		maxx=max(ans,maxx);
		return ;
	}
	//if(f[x][y])
	//	return ;
	for(int i=0; i<4; ++i) {
		if(a[x+xy[i][0]][y+xy[i][1]]<a[x][y]) {
			//cout<<a[x][y]<<' '<<x<<' '<<y<<endl;
			++ans;
			//f[x][y]=a[x][y];
			dfs(x+xy[i][0],y+xy[i][1]);
			//f[x][y]=0;
			--ans;
		}
	}	
}
int main() {
	int x,y,m=0;
	read(r);
	read(c);
	for(int i=1; i<=r; ++i) {
		for(int j=1; j<=c; ++j) {
			read(a[i][j]);
			minn=min(a[i][j],minn);
		}
	}
	for(int i=1; i<=r; ++i) {
		for(int j=1; j<=c; ++j) {
			dfs(i,j);
		}
	}
	write(maxx+1);
	return 0;
}
2021/3/12 15:57
加载中...