Cod sursa(job #1205397)

Utilizator smaraldaSmaranda Dinu smaralda Data 6 iulie 2014 13:38:45
Problema Ograzi Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.89 kb
#include<stdio.h>
#include<vector>
using namespace std;

const int MOD = 53639;

void getxy (int &x, int &y) {
    int i;
    char ln[20];

    gets(ln);
    x = y = 0;
    for(i = 0; ln[i] != NULL; ++ i)
        if(ln[i] >= '0' && ln[i] <= '9')
            x = x * 10 + ln[i] - '0';
        else
            break;
    for(; ln[i] != NULL; ++ i)
        if(ln[i] >= '0' && ln[i] <= '9')
            y = y * 10 + ln[i] - '0';
}

int height, width;

struct POINT {
    int ogx, ogy, x, y;

    POINT (int ogx = 0, int ogy = 0, int x = 0, int y = 0) {
        this->ogx = ogx;
        this->ogy = ogy;
        this->x = x;
        this->y = y;
    }
};

vector <POINT> h[MOD + 5];
vector <POINT>::iterator it;

void get (int &i, int &j, int x, int y) {
     i = x / width;
     j = y / height;
     if(x % width) ++ i;
     if(y % height) ++ j;
}

void ins (int x, int y) {
    int i, j;

    get(i, j, x, y);

    h[(i * 47 + j * 49) % MOD].push_back(POINT(i, j, x, y));
}

bool comprises (int i, int j, int x, int y) {
    return x >= i && x <= i + width && y >= j && y <= j + height;
}

bool src (int i, int j, int x, int y) {
    int f = (i * 47 + j * 49) % MOD;

    for(it = h[f].begin(); it != h[f].end(); ++ it)
        if(it->ogx == i && it->ogy == j && comprises(it->x, it->y, x, y))
            return 1;
    return 0;
}

int main() {
    freopen("ograzi.in", "r", stdin);
    freopen("ograzi.out", "w", stdout);
    int i, j, k, x, y, nOgr, nOi, cnt;

    scanf("%d%d%d%d\n", &nOgr, &nOi, &height, &width);
    for(i = 1; i <= nOgr; ++ i) {
        getxy(x, y);
        ins(x, y);
    }

    cnt = 0;
    for(k = 1; k <= nOi; ++ k) {
        getxy(x, y);

        get(i, j, x, y);

        if(src(i, j, x, y) || src(i - 1, j, x, y) || src(i, j - 1, x, y) || src(i - 1, j - 1, x, y) || src(i + 1, j, x, y) || src(i, j + 1, x, y) || src(i + 1, j + 1, x, y))
            ++ cnt;
    }

    printf("%d", cnt);
    return 0;
}