Cod sursă (job #319775)

Utilizator avatar RazvanGuta Razvan Alexandru Guta RazvanGuta IP ascuns
Problemă Immortal (clasele 9-10) Compilator cpp | 2,85 kb
Rundă 11_1 Status evaluat
Dată 29 oct. 2017 13:55:07 Scor 0
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("immortal.in");
ofstream g("immortal.out");
int a[101][101],n,i,j,m,nem,ok,numar;
struct r{
int l,c,l1,c1,l2,c2,s;
}v[101],v1[101];
bool cmp(r a,r b)
{
    return (a.s>=b.s);
}
void back1(int x,int y)
{
    int ver=1;
    if(a[x-2][y]==-1)
        a[x-2][y]=2;
    if(a[x+2][y]==-1)
        a[x+2][y]=2;
    if(a[x][y-2]==-1)
        a[x][y-2]=2;
    if(a[x][y+2]==-1)
        a[x][y+2]=2;
        int ok=2;
        while(ok!=0)
        {
            ok++;
            if(ver==0)
                break;
            else
            ver=0;
        for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
                if(a[i][j]==2)
                {
                    if(a[i-2][j]==-1)
                      {
                          a[i-2][j]=ok;
                          ver=1;
                      }
                    if(a[i+2][j]==-1)
                      {
                          ver=1;
                          a[i+2][j]=ok;
                      }
                    if(a[i][j-2]==-1)
                       {
                           a[i][j-2]=ok;
                           ver=1;
                       }
                    if(a[i][j+2]==-1)
                      {
                          a[i][j+2]=ok;
                          ver=1;
                      }
                }
            }
        }
        }
}
int main ()
{
    f>>n>>m>>nem;
    for(i=1;i<=nem;i++)
    {
        f>>v[i].l>>v[i].c;
    }
    ok=0;
    while(ok<nem)
    {
        ok++;
        numar=0;
       int  o=0;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            a[i][j]=-1;
        }
    }
    for(i=1;i<=nem;i++)
    {
        a[v[i].l][v[i].c]=1;
    }
    back1(v[ok].l,v[ok].c);
    a[v[ok].l][v[ok].c]=-3;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
           if(a[i][j]==1)
           {
               if((a[i-1][j]>0||a[i-1][j]==-3)&&(a[i+1][j]>0||a[i+1][j]==-3))
               {
                   v1[++o].l1=i-1;
                   v1[o].c1=j;
                   v1[o].l2=i+1;
                   v1[o].c2=j;
                   a[i][j]=0;
                   numar++;
               }
else
               if((a[i][j-1]>0||a[i][j-1]==-3)&&(a[i][j+1]>0||a[i][j+1]==-3))
               {
                   v1[++o].l1=i;
                   v1[o].c1=j-1;
                   v1[o].l2=i;
                   v1[o].c2=j+1;
                   a[i][j]=0;
                   numar++;
               }
           }
        }

    }

    if(numar==nem-1)
    {
           for(int w=1;w<=o;w++)
            {
            g<<v1[w].l1<<" "<<v1[w].c1<<" "<<v1[w].l2<<" "<<v1[w].c2;
            g<<endl;
            }
        }
    }
    return 0;
}