Pagini recente » Cod sursa (job #922268) | Cod sursa (job #1661056) | Cod sursa (job #1962520) | Cod sursa (job #2270038) | Cod sursa (job #1679360)
#include <bits/stdc++.h>
#define maxN 13 * 100002
#define ll long long
#define pii pair < int, int >
#define x first
#define y second
using namespace std;
pii pos;
int n, m, N, ans;
pii v[2][maxN];
int bs(int t, int cx, int cy)
{
pii c;
c.x = cx;
c.y = cy;
if(v[t][n] <= c)
return n + 1;
int i = 0, p = 1 << 20;
while (p)
{
if (i + p <= n && v[t][i + p] <= c)
i += p;
p /= 2;
}
return i + 1;
}
void read()
{
int i, px, py;
freopen("zc.in", "r", stdin);
scanf("%d %d", &n, &m);
N = 0;
for (i = 1; i <= n; ++ i)
{
int cx, cy;
scanf("%d %d", &cx, &cy);
for (px = 0; px <= 2; ++ px)
for (py = 0; py <= 2; ++ py)
if (px + py <= 2)
{
v[0][++ N].x = cx + px;
v[0][N].y = cy + py;
if (px)
{
v[0][++ N].x = cx - px;
v[0][N].y = cy + py;
}
if (py)
{
v[0][++ N].x = cx + px;
v[0][N].y = cy - py;
}
if (px && py)
{
v[0][++ N].x = cx - px;
v[0][N].y = cy - py;
}
}
}
}
void det_pos()
{
int i;
v[0][0].x = v[0][1].x + 1;
sort(v[0] + 1, v[0] + N + 1);
n = 0;
for (i = 1; i <= N; ++ i)
if (i == 1 || v[0][i].x != v[0][i - 1].x || v[0][i].y != v[0][i - 1].y)
{
v[0][++ n] = v[0][i];
v[1][n].x = v[0][i].y;
v[1][n].y = v[0][i].x;
}
sort(v[1] + 1, v[1] + n + 1);
}
void solve()
{
int p, i;
det_pos();
//pii pos;
pos.x = pos.y = 0;
for (i = 1; i <= m; ++ i)
{
char d;
int x, a, b;
scanf("\n%c %d", &d, &x);
if (d == 'N')
{
a = bs(0, pos.x, pos.y);
pos.y += x;
b = bs(0, pos.x, pos.y);
}
if (d == 'S')
{
b = bs(0, pos.x, pos.y - 1);
pos.y -= x;
a = bs(0, pos.x, pos.y - 1);
}
if (d == 'E')
{
a = bs(1, pos.y, pos.x);
pos.x += x;
b = bs(1, pos.y, pos.x);
}
if (d == 'V')
{
b = bs(1, pos.y, pos.x - 1);
pos.x -= x;
a = bs(1, pos.y, pos.x - 1);
}
ans += b - a;
}
}
void write()
{
freopen("zc.out", "w", stdout);
printf("%d", ans);
}
int main()
{
read();
solve();
write();
return 0;
}