Cod sursa(job #1807576)

Utilizator CodrutLemeniCodrut Lemeni CodrutLemeni Data 16 noiembrie 2016 18:35:27
Problema Regiuni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#define N 1010
#define P 103
#define MOD1 100003
#define MOD2 100007

using namespace std;

struct dreapta {
    int a ,b ,c;
};

struct sol {
    int v1,v2;
};

sol s[N];

dreapta d[N];

int sgn( dreapta d , int x, int y){
    static int val;

    val = d.a * x + d.b * y + d.c ;

    if(val>0){
        return 2;
    }else {
        return 1;
    }
}

int main(){
    int n,m,x,y;
    int add;
    int i,j,h1,h2;
    int nrsol=0,spy;

    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", &d[i].a , &d[i].b , &d[i].c );
    }

    for(j=0 ; j<m ; j++){
        scanf("%d%d",&x,&y);
        h1=h2=0;
        for(i=0 ; i<n ; i++){
            add = sgn(d[i] , x , y);
            h1 = (h1 * P + add) % MOD1;
            h2 = (h2 * P + add) % MOD2;
        }
        s[j].v1=h1;
        s[j].v2=h2;
    }


    for(i=0;i<m;i++){
        spy=0;

        for(j=0;j<i;j++){
            if(s[i].v1 == s[j].v1 && s[i].v2 == s[j].v2 ){
                spy=1;
                break;
            }
        }
        if(spy==0){
            nrsol++;
        }

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