Pagini recente » Borderou de evaluare (job #1445851) | Borderou de evaluare (job #203211) | Cod sursa (job #1701763) | Cod sursa (job #408603) | Cod sursa (job #1024260)
#include <fstream>
using namespace std;
ifstream f("marmote.in");
ofstream g("marmote.out");
int n, m, x, l, y, i, j, liv[1001][1001],k;
int verificare(int xf, int yf);
int marcare(int xf, int yf);
int main()
{
f>>n>>m>>k>>l;
for(i=1;i<=k;i++)
{
f>>x>>y;
if( verificare(x, y))
{
g<<i<<'\n';
marcare(x, y);
}
}
return 0;
}
int verificare(int xf, int yf)
{
int xst,xdr,yst,ydr;
//sus
if(xf-l>=1&&liv[xf-l][yf]!=0)
return 0;
if(xf-l<1)
{
yst=yf-(l-xf+1);
if(yst<1)
{
yst=1;
}
ydr=yf+(l-xf+1);
if(ydr>m)
{
ydr=m;
}
if(liv[1][yst]!=0)
return 0;
if (liv[1][ydr]!=0)
return 0;
}
//jos
if(xf+l<=n&&liv[xf+l][yf]!=0)
return 0;
if(xf+l>n)
{
yst=yf-(l-(n-xf));
if(yst<1)
{
yst=1;
}
ydr=yf+(l-(n-xf));
if(ydr>m)
{
ydr=m;
}
if(liv[n][yst]==1)
return 0;
if (liv[n][ydr]==1)
return 0;
}
//dreapta
if(yf+l>m)
{
yst=m;
ydr=m;
xst=xf-(l-(m-yf));
if(xst<1)
{
xst=1;
}
xdr=xf+(l-(m-yf));
if(xdr>n)
{
xdr=n;
}
if(liv[xst][yst]==1)
return 0;
if (liv[xdr][ydr]==1)
return 0;
}
else
if(liv[xf][yf+l]!=0)
return 0;
//stanga
if(yf-l<1)
{
yst=1;
ydr=1;
xst=xf-(l-yf+1);
if(xst<1)
{
xst=1;
}
xdr=xf+(l-yf+1);
if(xdr>n)
{
xdr=n;
}
if(liv[xst][yst]==1)
return 0;
if (liv[xdr][ydr]==1)
return 0;
}
else
if(liv[xf][yf-l]!=0)
return 0;
return 1;
}
int marcare(int xf, int yf)
{
int yst, ydr;
for(int i=0;i<=l;i++)
{
yst=yf-l+i;
if(yst<1)
yst=1;
ydr=y+l-i;
if(ydr>m)
ydr=m;
for(int j=yst;j<=ydr&&xf-i>=1;j++)
liv[xf-i][j]=1;
for(int j=yst;j<=ydr&&xf+i<=n;j++)
liv[xf+i][j]=1;
}
}