1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
#include<bits/stdc++.h> using namespace std; const int MAXN=1010; int n,m; char mp[MAXN][MAXN]; int dp1[MAXN][MAXN][2]; int dp2[MAXN][MAXN][2]; int main() { cin>>n>>m; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { cin>>mp[i][j]; if(mp[i][j]=='#') { dp1[i][j][0]=dp1[i][j][1]=-0x3f3f3f3f; dp2[i][j][0]=dp2[i][j][1]=0x3f3f3f3f; } } for(int i=2;i<=n;i++) dp1[i][0][0]=dp1[i][0][1]=-0x3f3f3f3f, dp2[i][0][0]=dp2[i][0][1]=0x3f3f3f3f; for(int i=2;i<=m;i++) dp1[0][i][0]=dp1[0][i][1]=-0x3f3f3f3f, dp2[0][i][0]=dp2[0][i][1]=0x3f3f3f3f; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(i==1&&j==1)continue; if(mp[i][j]=='#')continue; dp1[i][j][0]=max(dp1[i][j-1][1]+1,dp1[i][j-1][0]); dp1[i][j][1]=max(dp1[i-1][j][0]+1,dp1[i-1][j][1]); dp2[i][j][0]=min(dp2[i][j-1][1]+1,dp2[i][j-1][0]); dp2[i][j][1]=min(dp2[i-1][j][0]+1,dp2[i-1][j][1]); } if(dp1[n][m][0]<=0&&dp1[n][m][1]<=0)puts("-1"); else cout<<max(dp1[n][m][1],dp1[n][m][0])-1<<" "<<min(dp2[n][m][0],dp2[n][m][1]); return 0; }
|