什么题目就用什么变量名不要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;
}