Zepto Code Rush 2014 B

注意题目给的是一个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;

}

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

原文地址:https://www.cnblogs.com/xiongqiangcs/p/3788676.html