注意题目给的是一个nxm的park,设元素为aij,元素aij 有4种可能U(上移),D(下移),L(左移),R(右移)
假设第i行第j列元素aij(注意元素的索引是从0开始的)
当aij为D时,此时spiders一直往下移动不可能与Om Nom相遇
当aij为U时,此时spiders向上移动时此时Norm与spider初始位置之间距离是i+1,注意索引是从0开始的
如果i为偶数,i+1为奇数则两者必能在i/2位置相遇
如果i为奇数,当Norm在i/2,sprider在i/2+1,移动时,Norm在jump不可能相遇
当aij为R时,当Norm移动到第i行时此时aij右移已经到达ai(j+i)的位置,如果Norm从第i+j列向下移动则相遇
当aij为L时,当Norm移动到第i行时此时aij左移已经到达ai(j-i)的位置,如果Norm从第j-i列向下移动则相遇
注意边界处理
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int main(){ int n,m,k; cin >> n >> m >> k; vector<string> park(n); for(int i = 0 ; i < n ; ++ i) cin >> park[i]; vector<int> res(m,0); for(int i = 0 ; i < n; ++ i){ for(int j = 0 ; j < m; ++ j){ switch(park[i][j]){ case '.': case 'D': break; case 'U': if(i%2 == 0) res[j]++;break; case 'R': if(i+j < m) res[i+j]++;break; case 'L': if(j-i>=0) res[j-i]++;break; } } } for(int i = 0 ; i <m ; ++ i ){ if(i) cout<<" "; cout<<res[i]; } cout<<endl; }