Pagini recente » Cod sursa (job #1142800) | Cod sursa (job #109181) | Cod sursa (job #911390) | Cod sursa (job #1191195) | Cod sursa (job #463100)
Cod sursa(job #463100)
#include <stdio.h>
#include <algorithm>
using namespace std;
char ch;
int m, n, i, j, k;
long X, Y, nr;
int casute;
struct capcane
{
long int x;
long int y;
};
struct capcane v[100001];
long int compare (capcane a, capcane b)
{
if (a.x != b.x)
return a.x < b.x;
else
return a.y < b.y;
}
int cautare (long int x, long int y)
{
int st, dr, mijl;
st = 1;
dr = k;
while (st <= dr)
{
mijl = (st + dr) / 2;
if (v[mijl].x == X && v[mijl].y == Y)
return 1;
else if (v[mijl].x > X)
dr = mijl - 1;
else if (v[mijl].x < X)
st = mijl + 1;
else if (v[mijl].x == X && v[mijl].y > Y)
dr = mijl - 1;
else if (v[mijl].x == X && v[mijl].y < Y)
st = mijl + 1;
}
return 0;
}
int main ()
{
FILE *f = fopen ("zc.in","r");
FILE *g = fopen ("zc.out","w");
fscanf (f,"%d %d", &n, &m);
k = 1;
for (i=1; i<=n; ++i)
{
fscanf (f,"%ld %ld", &Y, &X);
v[k].x = X;
v[k].y = Y;
k ++;
v[k].x = X;
v[k].y = Y - 1;
k ++;
v[k].x = X;
v[k].y = Y - 2;
k ++;
v[k].x = X;
v[k].y = Y + 1;
k ++;
v[k].x = X;
v[k].y = Y + 2;
k ++;
v[k].x = X - 1;
v[k].y = Y;
k ++;
v[k].x = X - 1;
v[k].y = Y - 1;
k ++;
v[k].x = X - 1;
v[k].y = Y + 1;
k ++;
v[k].x = X - 2;
v[k].y = Y;
k ++;
v[k].x = X + 1;
v[k].y = Y;
k ++;
v[k].x = X + 1;
v[k].y = Y - 1;
k ++;
v[k].x = X + 1;
v[k].y = Y + 1;
k ++;
v[k].x = X + 2;
v[k].y = Y;
k ++;
}
k --;
sort (v + 1, v + 1 + k, compare);
/*for (i=1; i<=k; ++i)
printf ("%d %d\n", v[i].x, v[i].y);*/
X = Y = 0;
for (i=1; i<=m; ++i)
{
fscanf (f,"%c %d\n", &ch, &nr);
if (ch == 'N')
{
for (j=1; j<=nr; ++j)
{
X ++;
if (cautare (X, Y))
{
casute ++;
//printf ("%d %d\n", X, Y);
}
}
}
else if (ch == 'S')
{
for (j=1; j<=nr; ++j)
{
X --;
if (cautare (X, Y))
{
casute ++;
//printf ("%d %d\n", X, Y);
}
}
}
else if (ch == 'E')
{
for (j=1; j<=nr; ++j)
{
Y ++;
if (cautare (X, Y))
{
casute ++;
//printf ("%d %d\n", X, Y);
}
}
}
else if (ch == 'V')
{
for (j=1; j<=nr; ++j)
{
Y --;
if (cautare (X, Y))
{
casute ++;
//printf ("%d %d\n", X, Y);
}
}
}
}
//printf ("casute = %d", casute);
fprintf (g,"%d", casute);
fclose(g);
fclose(f);
return 0;
}