Cod sursa(job #873658)

Utilizator eucosminulFilip Cosmin Ionut eucosminul 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;
}