Cod sursa(job #1696914)

Utilizator sucureiSucureiRobert sucurei Data 30 aprilie 2016 12:34:54
Problema Regiuni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

#define BSIZE 1007
#define MP make_pair
#define F first
#define S second
#define NMAX 1007

char buffer[BSIZE];
const pair < int , int > base=MP(10153,10723);
const pair < int , int > MOD=MP(666013,100007);
pair < int , int > H[NMAX];
pair < pair < short int , short int > , short int > d[NMAX];
pair < short int , short int > po[NMAX];
int p,N,M,i,j,ans,sign;

int readInt()
{
    int number=0,sgn=1;

    while (!('0'<=buffer[p] && buffer[p]<='9'))
    {
        if (buffer[p]=='-') sgn=-1;

        if (p==BSIZE-1)
        {
            fread(buffer,1,BSIZE,stdin);
            p=0;
        } else ++p;
    }

    while ('0'<=buffer[p] && buffer[p]<='9')
    {
        number=number*10+buffer[p]-'0';

        if (p==BSIZE-1)
        {
            fread(buffer,1,BSIZE,stdin);
            p=0;
        } else ++p;
    }

    return sgn*number;
}

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

fread(buffer,1,BSIZE,stdin);

for (N=readInt(),M=readInt(),i=1;i<=N;++i)
{
    d[i].F.F=readInt();
    d[i].F.S=readInt();
    d[i].S=readInt();
}

for (i=1;i<=M;++i)
{
    po[i].F=readInt();
    po[i].S=readInt();
}

for (i=1;i<=M;++i)
for (j=1;j<=N;++j)
{
    sign=d[j].F.F*po[i].F+d[j].F.S*po[i].S+d[j].S;
    sign=(sign>=0) ? 1 : 0;

    H[i].F=(H[i].F*base.F+sign)%MOD.F;
    H[i].S=(H[i].S*base.S+sign)%MOD.S;
}

for (sort(H+1,H+M+1),i=1;i<=M;++i)
if (H[i]!=H[i-1]) ++ans;

printf("%d\n",ans);

return 0;
}