tle第一个点求助
查看原帖
tle第一个点求助
10177
fulikai20050531楼主2020/11/23 12:54
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
#include<cstring>

using namespace std;

int n,m,s,dd;

const int d[5][2]={{0,0},{0,-1},{0,1},{-1,0},{1,0}};
int salx[300],saly[300],map[1010][1010],dlx[300],dly[300],ans=0;

int dis(int x1,int y1,int x2,int y2){
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))+1e-6;
}

void dfs(int maxn,int x,int y,int away,int time){
	if (time>maxn) return;
	if (away>dd) return;
	if (x==dlx[time] && y==dly[time]){
		ans=time;
	}
	for (int i=0;i<=4;i++){
		int xx=x+d[i][0],yy=y+d[i][1];
		if (map[yy][xx]==1) continue;
		if (dis(xx,yy,salx[time],saly[time])>s) dfs(maxn,xx,yy,away+1,time+1);
		else dfs(maxn,xx,yy,0,time+1);
	}
}

int main(){
	scanf("%d%d%d%d",&n,&m,&s,&dd);
	for (int i=1;i<=n;i++){
		for (int j=1;j<=m;j++){
			char ch;
			scanf("%c",&ch);
			if (ch=='1') map[i][j]=1;else map[i][j]=0;
		} 
		getchar();
	}
	int saly1,salx1,dly1,dlx1;
	scanf("%d%d%d%d",&saly1,&salx1,&dly1,&dlx1);
	if (saly1==dly1 && salx1==dlx1){
		cout << 0 << endl;
		return 0;
	}
	char ch[200];
	cin >> ch;int len=strlen(ch);
	salx[0]=salx1;saly[0]=saly1;dlx[0]=dlx1;dly[0]=dly1;
	for (int i=0;i<=n+1;i++) map[0][i]=1;
	for (int i=0;i<=m+1;i++) map[i][0]=1;
	for (int i=0;i<=n+1;i++) map[m+1][i]=1;
	for (int i=0;i<=m+1;i++) map[i][n+1]=1;
	for (int i=1;i<=110;i++){
		int x=(i-1)%len;
		salx[i]=salx[i-1]+d[ch[x]-48][0];
		saly[i]=saly[i-1]+d[ch[x]-48][1];
		if (map[saly[i]][salx[i]]==1) saly[i]=saly[i-1],salx[i]=salx[i-1];
	}
	 
	getchar();
	cin >> ch;len=strlen(ch);
	for (int i=1;i<=110;i++){
		int x=(i-1)%len;
		dlx[i]=dlx[i-1]+d[ch[x]-48][0];
		dly[i]=dly[i-1]+d[ch[x]-48][1];
		if (map[dly[i]][dlx[i]]==1) dly[i]=dly[i-1],dlx[i]=dlx[i-1];
	}
	for (int i=1;i<=100;i++) {
		dfs(i,salx1,saly1,0,1);
		if (ans!=0) break; 
	}
	cout << ans << endl;
	return 0;
}

为什么在本地可以通过但是评测机上会tle

2020/11/23 12:54
加载中...