Cod sursa(job #57881)

Utilizator anoukAnca Dumitrache anouk Data 3 mai 2007 14:01:32
Problema Regiuni Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <cstdio>
#include <vector>
#include <string>
#include <algorithm>
#include <iostream>
#define DIM 1001
using namespace std;

struct Dreapta {
       int a, b, c;
};
struct Punct {
       int x, y;
};
vector <Dreapta> dr;
int n, m;
vector <string> V;
int sol;

void Read();
void Solve();
void Write();
int Coef(Dreapta D, Punct A);

int main()
{
    Read();
    Solve();
    Write();
    return 0;
}

void Read()
{
     FILE *fin = fopen("regiuni.in", "r");
     fscanf(fin, "%d%d", &n, &m);
     dr.resize(n+1);
     int aa, bb, cc;
     for (int i = 1; i <= n; i++)
     {
         fscanf(fin, "%d%d%d", &aa, &bb, &cc);
         dr[i].a = aa; dr[i].b = bb; dr[i].c = cc;
     }
     V.resize(m);
     int xx, yy;
     for (int i = 1; i <= m; i++)
     {
         fscanf(fin, "%d%d", &xx, &yy);
         Punct A;
         A.x = xx; A.y = yy;
         for (int j = 1; j <= n; j++)
             V[i-1] += Coef(dr[j], A) + '0';
     }
     fclose(fin);
}

void Solve()
{
     sort(V.begin(), V.end());
     for (int i = 0; i < m; i++)
     {
         while (i + 1 < m && V[i+1] == V[i]) i++;
         sol++;
     }
}

int Coef(Dreapta D, Punct A)
{
    if (D.a * A.x + D.b * A.y + D.c > 0) return 1;
    return 0;
}

void Write()
{
     FILE *fout = fopen("regiuni.out", "w");
     fprintf(fout, "%d\n", sol);
     fclose(fout);
}