Cod sursa(job #627103)

Utilizator vlad2901Vlad Berindei vlad2901 Data 28 octombrie 2011 23:59:31
Problema Regiuni Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#include <algorithm>
#define NMAX 1000
#define MOD 32

using namespace std;

int N, M;
int a[NMAX], b[NMAX], c[NMAX];
int x, y;
int v[NMAX][NMAX/MOD];
int h[NMAX];

int main()
{
    int i, j, nr, key;

    freopen("regiuni.in", "r", stdin);
    freopen("regiuni.out", "w", stdout);

    scanf("%d %d", &N, &M);


    for(i=0;i<N;++i)
    {
        scanf("%d %d %d", &a[i], &b[i], &c[i]);
    }

    for(i=0;i<M;++i)
    {
        scanf("%d %d", &x, &y);
        key = 0;

        for(j=0;j<N;++j)
        {
            if(a[j]*x + b[j]*y + c[j] > 0)
            {
                v[i][j/MOD] = (v[i][j/MOD]<<1) + 1;
            }
            else
            {
                v[i][j/MOD] = v[i][j/MOD]<<1;
            }
            if(j % MOD == MOD - 1)
            {
                key = (key * 7919 + v[i][j/MOD]) % 150000001;
            }
            key = (key * 7919 + v[i][j/MOD]) % 150000001;
        }
        h[i] = key;
    }

    sort(h, h+M);
    nr = 1;
    for(i=1;i<M;++i)
    {
        if(h[i] != h[i-1])
        {
            ++nr;
        }
    }

    printf("%d", nr);



    return 0;
}