Zepto Code Rush 2014 B - Om Nom and Spiders

时间:2021-12-21 01:24:55

注意题目给的是一个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 = ; i < n ; ++ i) cin >> park[i];
vector<int> res(m,);
for(int i = ; i < n; ++ i){
for(int j = ; j < m; ++ j){
switch(park[i][j]){
case '.':
case 'D':
break;
case 'U':
if(i% == ) res[j]++;break;
case 'R':
if(i+j < m) res[i+j]++;break;
case 'L':
if(j-i>=) res[j-i]++;break;
}
}
}
for(int i = ; i <m ; ++ i ){
if(i) cout<<" ";
cout<<res[i];
}
cout<<endl; }

题目地址:http://codeforces.com/contest/436/problem/B