Cod sursa(job #873658)
Utilizator | Data | 7 februarie 2013 15:28:58 | |
---|---|---|---|
Problema | Subsir crescator maximal | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.95 kb |
#include <fstream>
using namespace std;
ifstream f("marmote.in");
ofstream g("marmote.out");
int a[1001][1001],n,m,k,l,i,j,x,y,ok,st,dr,jos,sus;
int main()
{
f>>n>>m>>k>>l;
for(i=1;i<=k;i++){
f>>x>>y;
ok=1;
if(a[x][y]!=0)
{
ok=0;
continue;
}
//coltul de sus
if(x-l>=1)
{
if(a[x-l][y]!=0){
ok=0;
continue;
}
}
else{
st=y-(-x+l+1);
if(st<1)
st=1;
if(a[1][st]!=0){
ok=0;
continue;
}
dr=y-x+l+1;
if(dr>m)
dr=m;
if(a[1][dr]!=0){
ok=0;
continue;
}
}
// coltul de jos
if(x+l<=n)
{
if(a[x+l][y]!=0){
ok=0;
continue;
}
}
else{
st=y-(x+l-n);
if(st<1)
st=1;
if(a[n][st]!=0){
ok=0;
continue;
}
dr=y+x+l-n;
if(dr>m)
dr=m;
if(a[n][dr]!=0){
ok=0;
continue;
}
}
//coltul din stanga
if(y-l>=1)
{
if(a[x][y-l]!=0){
ok=0;
continue;
}
}
else{
sus=x-(-y+l+1);
if(sus<1)
sus=1;
if(a[sus][1]!=0){
ok=0;
continue;
}
jos=x-y+l+1;
if(jos>n)
jos=n;
if(a[jos][1]!=0){
ok=0;
continue;
}
}
//coltul din dreapta
if(y+l<=m)
{
if(a[x][y+l]!=0){
ok=0;
continue;
}
}
else{
sus=x-(y+l-m);
if(sus<1)
sus=1;
if(a[sus][m]!=0){
ok=0;
continue;
}
jos=x+y+l-m;
if(jos>n)
jos=n;
if(a[jos][m]!=0){
ok=0;
continue;
}
}
if(ok==1) {
g<<i<<'\n';
for(j=0;j<=l;j++){
st=y-(l-j);
if(st<1)
st=1;
dr=y+l-j;
if(dr>m)
dr=m;
if(x-j>=1)
for(int z=st;z<=dr;z++)
a[x-j][z]=1;
if(x+j<=n)
for(int z=st;z<=dr;z++)
a[x+j][z]=1;
}
}
}
return 0;
}