Cod sursa(job #285525)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 22 martie 2009 18:01:04
Problema Regiuni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <stdio.h>
#include <vector>
#include <set>

#define maxn 1010
#define pb push_back

using namespace std;

long n, m, i, j, k, sol, l[maxn], gr[maxn], s[maxn], f[maxn], ok[maxn];
long x[maxn], y[maxn], a[maxn], b[maxn], c[maxn];

long semn(long i, long j)
{
    long ec=a[i]*x[j]+b[i]*y[j]+c[i];
    if(ec>0) return 1;
    return -1;
}

int main()
{
    freopen("regiuni.in", "r", stdin);
    freopen("regiuni.out", "w", stdout);
    scanf("%d %d\n", &n, &m);
    for(i=1; i<=n; i++)
    {
        scanf("%d %d %d", &a[i], &b[i], &c[i]);
    }
    for(i=1; i<=m; i++)
    {
        scanf("%d %d", &x[i], &y[i]);
        gr[i]=1;
    }
    sol=1;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            f[j]=0;
            s[j]=0;
        }
        for(j=1; j<=m; j++)
        {
            l[j]=semn(i, j);
            if(f[gr[j]]==0)
            {
                f[gr[j]]=1;
                s[gr[j]]=l[j];
                ok[gr[j]]=0;
            }
            if(ok[gr[j]]==0 && l[j]!=s[gr[j]])
            {
                sol++;
                ok[gr[j]]=sol;
            }
            if(l[j]!=s[gr[j]])
            {
                gr[j]=ok[gr[j]];
            }
        }
    }
    printf("%d\n", sol);
    return 0;
}