1 solutions
-
0
C++ :
#include<bits/stdc++.h> using namespace std; int r,c,k,t,ans; float bj=1.0;//标记第一次垂直下降开始的行号 char a[55][55]; void find(int x,int y) { if(x==r) {cout<<ans;exit(0);} if(a[x+1][y]=='.') find(x+1,y); else for(int i=y+1,j=y-1;;i++,j--) //左右找哪一列可以下降 { if(a[x+1][i]=='.' && i<=c) {//往右找 if((i*1.0-y*1.0)/(x*1.0+1-bj)>k) {cout<<-1;exit(0);} // 需要移动的列数除以下降的行数>K,即平均每行下降的列数>K,则不行 bj=x+1;//标记下一次垂直下降开始的行号 ans+=i-y;//累加答案 find(x+1,i); } else if(a[x+1][j]=='.' && j>=1){//往左找 if((y*1.0-j*1.0)/(x*1.0+1-bj)>k) {cout<<-1;exit(0);} bj=x+1; ans+=y-j; find(x+1,j); } } } int main() { cin>>r>>c>>k; for(int i=1;i<=r;i++) for(int j=1;j<=c;j++) cin>>a[i][j]; for(int i=1;;i++) if(a[1][i]=='v') {t=i;break;} find(1,t); return 0; }
- 1
Information
- ID
- 995
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 10
- Tags
- # Submissions
- 1
- Accepted
- 1
- Uploaded By