Pagini recente » Monitorul de evaluare | Cod sursa (job #204850) | contest_5 | Cod sursa (job #2201077) | Cod sursa (job #386051)
Cod sursa(job #386051)
#include <stdio.h>
int sgn(int a)
{
if (a<0) return -1;
return 1;
}
int main()
{
FILE* fin = fopen("poligon.in", "r");
FILE* fout = fopen("poligon.out", "w");
int N, M;
fscanf(fin, "%d %d", &N, &M);
int POL[801][2];
int INF[60001][2];
for (int i = 0; i < N; i++)
{
fscanf(fin, "%d %d", &POL[i][0], &POL[i][1]);
}
POL[N][0] = POL[0][0];
POL[N][1] = POL[0][1];
for (int i = 0; i < M; i++)
{
fscanf(fin, "%d %d", &INF[i][0], &INF[i][1]);
}
int valid = 0;
for (int i = 0; i < M; i++)
{
int ct = 0;
for (int j = 0; j < N; j++)
{
if (POL[j][0] > INF[i][0] && POL[j+1][0] > INF[i][0])
{
if ((POL[j][1] > INF[i][1] && POL[j+1][1] < INF[i][1]) || (POL[j][1] < INF[i][1] && POL[j+1][1] > INF[i][1]))
{
ct++;
}
else
{
if (INF[i][1] == POL[j][1] && (sgn(POL[j-1][1] - INF[i][1]) != sgn(POL[j+1][1] - INF[i][1])))
ct++;
}
}
else
{
if ((POL[j][0] > INF[i][0] && POL[j+1][0] < INF[i][0]) || (POL[j][0] < INF[i][0] && POL[j+1][0] > INF[i][0]))
{
if ((POL[j][1] > INF[i][1] && POL[j+1][1] < INF[i][1]) || (POL[j][1] < INF[i][1] && POL[j+1][1] > INF[i][1]))
{
ct++;
}
}
}
}
if (ct % 2 == 0)
{
valid++;
}
}
fprintf(fout, "%d", valid);
fclose(fin);
fclose(fout);
return 0;
}