注意題目給的是一個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; }