Tuesday, July 28, 2015

11831 - Sticker Collector Robot

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cctype>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <sstream>
#include <cmath>
#include <bitset>
#include <utility>
#include <set>
#include <numeric>
using namespace std;

typedef vector<int> vi;
typedef pair<int,int> ii;
typedef vector<ii> vii;

int main()
{
    freopen("11831 - Sticker Collector Robot.txt","r", stdin);
    int n,m,s,i,j,si,sj,c;
    while(scanf("%d %d %d", &n, &m, &s) && (n || m || s))
    {
        char cell[110][110],d;
        string instruct;
        for(i=0; i<n; i++)
            cin >> cell[i];
        bool flag = false;
        for(i=0; i<n; i++)
        {
            for(j=0; j<m; j++)
                if(cell[i][j] == 'N' || cell[i][j] == 'S' || cell[i][j] == 'L' || cell[i][j] == 'O')
                {
                    si=i;
                    sj=j;
                    d = cell[i][j];
                    flag = true;
                    break;
                }
            if(flag)
                break;
        }
        cin >> instruct;
        c = 0;
        for(i=0; i<s; i++)
        {
            if(instruct[i] == 'D')
            {
                if(d == 'N')
                    d = 'L';
                else if(d == 'S')
                    d = 'O';
                else if(d == 'L')
                    d = 'S';
                else if(d == 'O')
                    d = 'N';
            }
            else if(instruct[i] == 'E')
            {
                if(d == 'N')
                    d = 'O';
                else if(d == 'S')
                    d = 'L';
                else if(d == 'L')
                    d = 'N';
                else if(d == 'O')
                    d = 'S';
            }
            else
            {
                if(d == 'N' && si != 0)
                {
                    if(cell[si-1][sj] != '#')
                        si--;
                    if(cell[si][sj] == '*')
                    {
                        c++;
                        cell[si][sj] = '.';
                    }
                }
                else if(d == 'S' && si != n-1)
                {
                    if(cell[si+1][sj] != '#')
                        si++;
                    if(cell[si][sj] == '*')
                    {
                        c++;
                        cell[si][sj] = '.';
                    }
                }
                else if(d == 'L' && sj != m-1)
                {
                    if(cell[si][sj+1] != '#')
                        sj++;
                    if(cell[si][sj] == '*')
                    {
                        c++;
                        cell[si][sj] = '.';
                    }
                }
                if(d == 'O' && sj != 0)
                {
                    if(cell[si][sj-1] != '#')
                        sj--;
                    if(cell[si][sj] == '*')
                    {
                        c++;
                        cell[si][sj] = '.';
                    }
                }
            }
        }
        printf("%d\n",c);
    }
    return 0;
}

No comments:

Post a Comment

Triathlon

Triathlon - CodeChef # include < bits/stdc++.h > using namespace std ; # define fi first # define se second # define mp ...