Zepto Code Rush 2014 B - Om Nom and Spiders

OpenSoucre發表於2014-06-14

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

相關文章