京师厚仁
查看原帖
京师厚仁
1164775
Jadonyzx楼主2024/4/28 18:27

什么题目就用什么变量名不要memset!!!

TLE:

#include<bits/stdc++.h>
#define int long long
#define maxn 2010
using namespace std;
struct re_master{
	int rating,sss;
};
int maimai[maxn][maxn],rating[maxn][maxn],Allperfect[maxn][maxn],Fullcombo[maxn][maxn];
char coin;
queue<re_master>dx;
int T,n,m;
void track1(){
	memset(rating,-1,sizeof rating);
	while(!dx.empty())dx.pop();
	rating[1][1]=0;
	return;
}
void track2(){
	re_master master;
	master.rating=master.sss=1;
	dx.push(master);
	while(!dx.empty()){
		re_master expert=dx.front();
		dx.pop();
		int perfect=expert.rating;
		int good=expert.sss;
		if(perfect==n&&good==m)break;
		if(perfect-1>=1){
			if(maimai[perfect-1][good]!=maimai[perfect][good]&&rating[perfect-1][good]==-1){
				rating[perfect-1][good]=rating[perfect][good]+1;
				Allperfect[perfect-1][good]=perfect;
				Fullcombo[perfect-1][good]=good;
				re_master advanced;
				advanced.rating=perfect-1;advanced.sss=good;
				dx.push(advanced);
			}
		}
		if(perfect+1<=n){
			if(maimai[perfect+1][good]!=maimai[perfect][good]&&rating[perfect+1][good]==-1){
				rating[perfect+1][good]=rating[perfect][good]+1;
				Allperfect[perfect+1][good]=perfect;
				Fullcombo[perfect+1][good]=good;
				re_master advanced;
				advanced.rating=perfect+1;advanced.sss=good;
				dx.push(advanced);
			}
		}
		if(good-1>=1){
			if(maimai[perfect][good-1]!=maimai[perfect][good]&&rating[perfect][good-1]==-1){
				rating[perfect][good-1]=rating[perfect][good]+1;
				Allperfect[perfect][good-1]=perfect;
				Fullcombo[perfect][good-1]=good;
				re_master advanced;
				advanced.rating=perfect;advanced.sss=good-1;
				dx.push(advanced);
			}
		}
		if(good+1<=m){
			if(maimai[perfect][good+1]!=maimai[perfect][good]&&rating[perfect][good+1]==-1){
				rating[perfect][good+1]=rating[perfect][good]+1;
				Allperfect[perfect][good+1]=perfect;
				Fullcombo[perfect][good+1]=good;
				re_master advanced;
				advanced.rating=perfect;advanced.sss=good+1;
				dx.push(advanced);
			}
		}
	}
	cout<<rating[n][m]<<'\n';
	return;
}
void track3(int AP,int FC){
	if(rating[AP][FC]==-1)return;
	if(AP==1&&FC==1)return;
	if(AP-Allperfect[AP][FC]==1){
		track3(Allperfect[AP][FC],FC);
		cout<<'D';
	}
	else if(AP-Allperfect[AP][FC]==-1){
		track3(Allperfect[AP][FC],FC);
		cout<<'U';
	}
	else if(FC-Fullcombo[AP][FC]==1){
		track3(AP,Fullcombo[AP][FC]);
		cout<<'R';
	}
	else if(FC-Fullcombo[AP][FC]==-1){
		track3(AP,Fullcombo[AP][FC]);
		cout<<'L';
	}
	return;
}
void track4(){
	if(rating[n][m]!=-1)cout<<'\n';
	return;
}
signed main(){
	cin>>T;
	while(T--){
		cin>>n>>m;
		for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
		cin>>coin,maimai[i][j]=(int)((coin=='1')?1:0);
		track1();
		track2();
		track3(n,m);
		track4();
	}
	return 0;
}

AC:

#include<bits/stdc++.h>
#define int long long
#define maxn 2010
using namespace std;
struct re_master{
	int rating,sss;
};
int maimai[maxn][maxn],rating[maxn][maxn],Allperfect[maxn][maxn],Fullcombo[maxn][maxn];
char coin;
queue<re_master>dx;
int T,n,m;
void track1(){
	for(int i=1;i<=n;++i)
	for(int j=1;j<=m;++j)
	rating[i][j]=-1;
	while(!dx.empty())dx.pop();
	rating[1][1]=0;
	return;
}
void track2(){
	re_master master;
	master.rating=master.sss=1;
	dx.push(master);
	while(!dx.empty()){
		re_master expert=dx.front();
		dx.pop();
		int perfect=expert.rating;
		int good=expert.sss;
		if(perfect==n&&good==m)break;
		if(perfect-1>=1){
			if(maimai[perfect-1][good]!=maimai[perfect][good]&&rating[perfect-1][good]==-1){
				rating[perfect-1][good]=rating[perfect][good]+1;
				Allperfect[perfect-1][good]=perfect;
				Fullcombo[perfect-1][good]=good;
				re_master advanced;
				advanced.rating=perfect-1;advanced.sss=good;
				dx.push(advanced);
			}
		}
		if(perfect+1<=n){
			if(maimai[perfect+1][good]!=maimai[perfect][good]&&rating[perfect+1][good]==-1){
				rating[perfect+1][good]=rating[perfect][good]+1;
				Allperfect[perfect+1][good]=perfect;
				Fullcombo[perfect+1][good]=good;
				re_master advanced;
				advanced.rating=perfect+1;advanced.sss=good;
				dx.push(advanced);
			}
		}
		if(good-1>=1){
			if(maimai[perfect][good-1]!=maimai[perfect][good]&&rating[perfect][good-1]==-1){
				rating[perfect][good-1]=rating[perfect][good]+1;
				Allperfect[perfect][good-1]=perfect;
				Fullcombo[perfect][good-1]=good;
				re_master advanced;
				advanced.rating=perfect;advanced.sss=good-1;
				dx.push(advanced);
			}
		}
		if(good+1<=m){
			if(maimai[perfect][good+1]!=maimai[perfect][good]&&rating[perfect][good+1]==-1){
				rating[perfect][good+1]=rating[perfect][good]+1;
				Allperfect[perfect][good+1]=perfect;
				Fullcombo[perfect][good+1]=good;
				re_master advanced;
				advanced.rating=perfect;advanced.sss=good+1;
				dx.push(advanced);
			}
		}
	}
	cout<<rating[n][m]<<'\n';
	return;
}
void track3(int AP,int FC){
	if(rating[AP][FC]==-1)return;
	if(AP==1&&FC==1)return;
	if(AP-Allperfect[AP][FC]==1){
		track3(Allperfect[AP][FC],FC);
		cout<<'D';
	}
	else if(AP-Allperfect[AP][FC]==-1){
		track3(Allperfect[AP][FC],FC);
		cout<<'U';
	}
	else if(FC-Fullcombo[AP][FC]==1){
		track3(AP,Fullcombo[AP][FC]);
		cout<<'R';
	}
	else if(FC-Fullcombo[AP][FC]==-1){
		track3(AP,Fullcombo[AP][FC]);
		cout<<'L';
	}
	return;
}
void track4(){
	if(rating[n][m]!=-1)cout<<'\n';
	return;
}
signed main(){
	cin>>T;
	while(T--){
		cin>>n>>m;
		for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
		cin>>coin,maimai[i][j]=(int)((coin=='1')?1:0);
		track1();
		track2();
		track3(n,m);
		track4();
	}
	return 0;
}
2024/4/28 18:27
加载中...