Cod sursa(job #37634)

Utilizator snaked31Stanica Andrei snaked31 Data 25 martie 2007 11:33:23
Problema Regiuni Scor 80
Compilator cpp Status done
Runda preONI 2007, Runda 4, Clasele 11-12 Marime 1.76 kb
#include <stdio.h>

#define modulo 499

#define nm 1010
#define mm 510

int n, m, i, j, sol, l;
int v[nm][nm], a[nm], b[nm], c[nm], x[nm], y[nm];
//bool u[mm][mm][mm];
int viz[nm];
int hx[nm], hy[nm], hz[nm];

const int X = 269;
const int Y = 311;
const int Z = 397;

void read()

{
	scanf("%d %d", &m, &n);

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

    for (i=1; i<=n; ++i)
    {
        scanf("%d %d", &x[i], &y[i]);
    }
    
}


void solve()

{
	for (i=1; i<=n; ++i)
    {
        for (j=1; j<=m; ++j)
        {
        	l = a[j] * x[i] + b[j] * y[i] + c[j];
            if (l == 0)
            {
                v[i][j] = 0;
            }
            if (l > 0)
            	v[i][j] = 1;
            if (l < 0)
            	v[i][j] = -1;

            hx[i] = (((hx[i] * X) % modulo) + v[i][j]) % modulo;
            hy[i] = (((hy[i] * Y) % modulo) + v[i][j]) % modulo;
            hz[i] = (((hz[i] * Z) % modulo) + v[i][j]) % modulo;
        }
    }

    sol = 0;

    for (i=1; i<=n; ++i)
    {
/*    	if (u[hx[i]][hy[i]][hz[i]] == 0)
		{
        	u[hx[i]][hy[i]][hz[i]] = 1;
            sol ++;
        }*/
        if (viz[i] == 0)
        {
            viz[i] = 1;
            ++ sol;
            for (j = i + 1; j <=n; ++j)
            {
                if (hx[i] == hx[j] && hy[i] == hy[j] && hz[i] == hz[j])
                {
                    viz[j] = 1;
                }
            }
        }
    }


}


void write()

{
	printf("%d\n", sol);
}


int main()

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

    read();
    solve();
    write();

    fclose(stdin);
    fclose(stdout);

	return 0;
}