Pagini recente » Cod sursa (job #2513398) | Cod sursa (job #3259067) | Cod sursa (job #2239101) | Cod sursa (job #447093) | Cod sursa (job #226901)
Cod sursa(job #226901)
#include<fstream.h>
#include<stdlib.h>
#define g 100008
int N,M,C;
struct GROPI
{
int x,y;
};
GROPI gr[g];
int compare (const void *a, const void *b)
{
return (((GROPI*)a)->y-((GROPI*)b)->y);
}
ifstream be ("gropi.in");
ofstream ki ("gropi.out");
void solve()
{
int s,x1,y1,x2,y2,i,j,sz,p;
be>>M;
for (i=1;i<=M;i++)
{
be>>x1>>y1>>x2>>y2;
if (y2<y1)
{
s=y2;
y2=y1;
y1=s;
s=x2; //le schimb
x2=x1;
x1=s;
}
s=x1;
sz=1;
p=1;
while (y1<y2)
{
while (gr[p].y<y1 || (gr[p].x!=s && gr[p].y<=y2 && p<=N))//caut urmatorul obstacol
p++;
if (gr[p].y<y2)
{
sz+=gr[p].y-y1;
y1=gr[p].y-1; //daca exista asa ceva
if (s==1)
s=2;
else
s=1;
}
else
{
sz+=y2-y1;
y1=y2; //daca am ajuns la final
if (s!=x2)
sz++;
}
}
ki<<sz<<'\n';
}
ki.close();
}
int main()
{
be>>C>>N;
int i;
for (i=1;i<=N;i++)
be>>gr[i].x>>gr[i].y;
qsort (gr,N+1,sizeof(GROPI),compare);
solve();
return 0;
}