Pagini recente » Cod sursa (job #1036468) | Cod sursa (job #1853044) | Cod sursa (job #1292494) | Cod sursa (job #1618234) | Cod sursa (job #481806)
Cod sursa(job #481806)
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
#define maxn 1024
#define P1 11
#define P2 17
#define mod1 33789
#define mod2 27891
int N, M, reg;
pair<int, int> Hash[maxn];
struct Drepte {
int a, b, c;
} D[maxn];
int main() {
FILE *f1=fopen("regiuni.in", "r"), *f2=fopen("regiuni.out", "w");
int i, j, p, x, y;
fscanf(f1, "%d %d\n", &N, &M);
for(i=1; i<=N; i++) {
fscanf(f1, "%d %d %d\n", &D[i].a, &D[i].b, &D[i].c);
}
for(i=1; i<=M; i++) {
fscanf(f1, "%d %d\n", &x, &y);
int hash1 = 0, hash2 = 0;
for(j=1; j<=N; j++) {
p = D[j].a * x + D[j].b * y + D[j].c;
if(p > 0) p = 1;
else p = 0;
hash1 = (hash1 * P1 + p) % mod1;
hash2 = (hash2 * P2 + p) % mod2;
}
Hash[i].first = hash1;
Hash[i].second = hash2;
}
sort(Hash+1, Hash+M+1);
int lst = 0;
for(i=1; i<=M; i++) {
if(Hash[i].first == Hash[lst].first && Hash[i].second == Hash[lst].second) {
continue;
}
else {
reg++;
lst = i;
}
}
fprintf(f2, "%d\n", reg);
fclose(f1); fclose(f2);
return 0;
}