样例
4 5
ponoc
ohoho
hlepo
mirko
4 5
bbbbb
bbbbb
bbabb
bbbbb
2 5
qwert
yuiop
分析
首先,不管怎么走,走出来的字符串是长度相等的,这个比较好理解
那么,字典序的比较就决定于比到的第一个不一样的字符
所以我们每次走的时候就比较一下右边和下边,走最小的那边
于是,第一个骗分程序:
//50%
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define LL long long
#define MAXN 2005
int n,m,cnt;
char s[MAXN][MAXN],ans[MAXN*2];
const int dx[]={
0,1},dy[]={
1,0};
bool check(int x,int y)
{
if(x<1||x>n||y<1||y>m)
return 0;
return 1;
}
void dfs(int r,int c)
{
//printf("%d %d\n",r,c);
if(r==n&&c==m) return ;
char tmp=123;
int nx,ny;
int x=r+dx[0],y=c+dy[0];
if(check(x,y))
tmp=s[x][y],nx=x,ny=y;
//if(r==4&&c==4) printf("%d %d\n",nx,ny);
x=r+dx[1],y=c+dy[1];
if(check(x,y))
{
if(s[x][y]<tmp)
{
ans[++cnt]=s[x][y];
dfs(x,y);
return ;
}
}
ans[++cnt]=tmp;
dfs(nx,ny);
return ;
}
int main()
{
//freopen("imena.in","r",stdin