Pagini recente » Cod sursa (job #233997) | Cod sursa (job #1027831) | Cod sursa (job #1898818) | Cod sursa (job #964094) | Cod sursa (job #1020855)
#include<fstream>
#include<algorithm>
using namespace std;
int dist,n,m,x,y; //SOLUTIE DE 0 PUNCTE CA SA AM SURSA SALVATA
int nr,aux,sol,t1,t2,k;
char dir;
pair <int, int> vx[1400000],vy[1400000];
ifstream in("zc.in"); ofstream out("zc.out");
inline void inserare(int x, int y){
for(int i=-2;i<=2;++i)
for(int j=-2;j<=2;++j)
if(abs(i)+abs(j)<=2 && (x+i || y+j)){
vx[++nr].first=y+i;
vx[nr].second =x+j;
}
}
inline int search(pair <int,int> v[1400000],int x,int y){
int st=1,dr=nr,mid;
pair<int,int> t;
t.first=x, t.second=y;
if(v[nr]<=t) return nr+1;
while(st<dr){
mid=(st+dr)/2;
if(v[mid]<=t) st=mid+1;
else dr=mid;
}
return st;
}
int main(){
in>>n>>m;
for(int i=1;i<=n;++i){
in>>x>>y;
inserare(x,y);
}
vx[0]=vx[1]; vx[0].first--;
sort(vx+1,vx+nr+1);
int nr2=0;
for(int i=1;i<=nr;++i) if(vx[i-1]!=vx[i]) vx[++nr2]=vx[i];
nr=nr2;
for(int i=1;i<=nr;++i) vy[i].first=vx[i].second, vy[i].second=vx[i].first;
sort(vy+1,vy+nr+1);
x=y=0;
for(int i=1; i<=m; ++i){
in>>dir>>k;
switch(dir){
case 'N': {t1=search(vy,x,y); y+=k; t2=search(vy,x,y); break;}
case 'S': {t2=search(vy,x,y-1); y-=k; t1=search(vy,x,y-1); break;}
case 'V': {t2=search(vx,y,x-1); x-=k; t1=search(vx,y,x-1); break;}
case 'E': {t1=search(vx,y,x); x+=k; t2=search(vx,y,x); break;}
}
sol+=t2-t1;
}
out<<sol<<'\n'; out.close(); return 0;
}