Cod sursa(job #1140560)

Utilizator japjappedulapPotra Vlad japjappedulap Data 12 martie 2014 08:47:43
Problema Zota & Chidil Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

#define TX pair<int,int>
#define x first
#define y second

ifstream is ("zc.in");
ofstream os ("zc.out");

const int Di[] = {1, 1, 0, -1, -1, -1, 0, 1}, Dj[] = {0, 1, 1, 1, 0, -1, -1, -1};

int n, m, steps, cnt;
char D;
TX X;

vector <TX> V;

void Read();
void Solve();
int GetDir(char x);

int main()
{
    Read();
    sort(V.begin(), V.end());
    for (int k = 1; k <= m; ++k)
        Solve();
    os << cnt;
    is.close();
    os.close();
    return 0;
}

void Solve()
{
    is >> D >> steps;
    int Dir = GetDir(D);
    for (int k = 0; k < steps; ++k)
    {
        X.x += Dj[Dir];
        X.y += Di[Dir];
        if (binary_search(V.begin(), V.end(), X) == true)
            cnt++;
    }
};

void Read()
{
    is >> n >> m;
    int i, j, iv, jv;
    for (int k = 1; k <= n; ++k)
    {
        is >> i >> j;
        for (int d = 0; d < 8; ++d)
        {
            iv = i + Di[d];
            jv = j + Dj[d];
            V.push_back(make_pair(iv, jv));
        }
        V.push_back(make_pair(i+2, j));
        V.push_back(make_pair(i, j+2));
        V.push_back(make_pair(i-2, j));
        V.push_back(make_pair(i, j-2));
        V.push_back(make_pair(i, j));
    }
};

int GetDir(char x)
{
    if (x == 'N') return 0;
    if (x == 'E') return 2;
    if (x == 'S') return 4;
    if (x == 'V') return 6;
    return 0;
};