Pagini recente » Cod sursa (job #2688872) | Cod sursa (job #2885049) | Cod sursa (job #2076986) | Cod sursa (job #2774176) | Cod sursa (job #178202)
Cod sursa(job #178202)
#include<fstream.h>
#include<math.h>
int max(int a,int b)
{
if (a<b) return b;
else return a;
}
int min(int a, int b)
{
if (a<b) return a;
else return b;
}
struct punct {
int x,y;
};
int verificv (punct p1, punct p2, punct c)
{
if (abs(p1.x-c.x)<=2 && c.y-2<=p2.y && c.y+2>=p1.y)
{
int i,nr=0,t=1,a[7][7];memset(a,0,sizeof(a));
a[1][3]=a[2][2]=a[2][3]=a[2][4]=a[3][1]=a[3][2]=a[3][3]=a[3][4]=a[3][5]=a[4][2]=a[4][3]=a[4][4]=a[5][3]=1;
for (i=max(c.y-2,p1.y);i<=min(c.y+2,p2.y);i++,t++)
if (a[5-t+1][abs(p1.x-c.x)+3]==1) nr++;
return nr;
}
return 0;
}
int verifico (punct p1, punct p2, punct c)
{
if (abs(p1.y-c.y)<=2 && c.x-2<=p2.x && c.x+2>=p1.x)
{
int i,nr=0,t=1,a[7][7];memset(a,0,sizeof(a));
a[1][3]=a[2][2]=a[2][3]=a[2][4]=a[3][1]=a[3][2]=a[3][3]=a[3][4]=a[3][5]=a[4][2]=a[4][3]=a[4][4]=a[5][3]=1;
for (i=max(c.x-2,p1.x);i<=min(c.x+2,p2.x);i++,t++)
if (a[abs(p1.y-c.y)+3][6-t]==1) nr++;
return nr;
}
return 0;
}
int main()
{
long long t=0;
int n,k,m,i,j;
char ch;
punct v[100002],p1,p2; p1.x=0;p1.y=0;
ifstream f("zc.in");
f>>n>>m;
for (i=1;i<=n;i++) f>>v[i].x>>v[i].y;
for (i=1;i<=m;i++)
{
f>>ch>>k;
if (ch=='N') {p2.x=p1.x;p2.y=p1.y+k;}
else if (ch=='S') {p2.x=p1.x;p2.y=p1.y-k;}
else if (ch=='E') {p2.y=p1.y;p2.x=p1.x+k;}
else { p2.y=p1.y;p2.x=p1.x-k;}
for (j=1;j<=n;j++)
if (ch=='N' || ch=='S') if (ch=='N') t+=verificv(p1,p2,v[j]);
else t+=verificv(p2,p1,v[j]);
else if (ch=='E') t+=verifico(p1,p2,v[j]);
else t+=verifico(p2,p1,v[j]);
p1=p2;
}
f.close();
ofstream g("zc.out");
g<<t; g.close();
return 0;
}