Cod sursă (job #819710)

Utilizator avatar dgriga Griga Darius dgriga IP ascuns
Problemă Beculețe (clasele 9-10) Compilator cpp-32 | 6,90 kb
Rundă Arhiva de probleme Status evaluat
Dată 9 apr. 2025 12:05:06 Scor 0
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("tanc.in");
ofstream g("tanc.out");
char c[105][105];
int ma[205][205];
int main()
{
    int cer, s, m, n, h;
    f >> cer >> s >> m >> n >> h;
    if(cer==1)
    {
        for(int i=1; i<=s; i++)
        {
            for(int j=1; j<=m; j++)
            {
                for(int k=1; k<=m; k++)
                {
                    f >> c[j][k];
                }
            }
        }
        string drum;
        f >> drum;
        int it=1, jt=1;
        for(int i=0; drum[i]!='\0'; i++)
        {
            if(drum[i]=='S')
                it+=m;
            else if(drum[i]=='N')
                it-=m;
            else if(drum[i]=='E')
                jt+=m;
            else
                jt-=m;
        }
        g << it << " " << jt;
    }
    else if(cer==2)
    {
        for(int i=1; i<=s; i++)
        {
            for(int j=1; j<=m; j++)
            {
                for(int k=1; k<=m; k++)
                {
                    f >> c[j+(m*(i-1))][k];
                }
            }
        }
        string drum;
        f >> drum;
        int inceput=1;
        int orientare=3;
        for(int i=0; drum[i]!='\0'; i++)
        {
            inceput++;
            if(drum[i]=='N')
                orientare=1;
            else if(drum[i]=='S')
                orientare=2;
            else if(drum[i]=='E')
                orientare=3;
            else
                orientare=4;
        }
        for(int i=inceput; i<=inceput+s-1; i++)
        {
            int sina=i%s;
            if(sina==0)
                sina=s;
            if(orientare==1)
            {
                for(int k=m; k>=1; k--)
                {
                    for(int j=(sina-1)*m+1; j<=sina*m; j++)
                    {
                        g << c[j][k];
                    }
                    g << '\n';
                }
            }
            else if(orientare==2)
            {
                for(int k=1; k<=m; k++)
                {
                    for(int j=sina*m; j>=(sina-1)*m+1; j--)
                    {
                        g << c[j][k];
                    }
                    g << '\n';
                }
            }
            else if(orientare==3)
            {
                for(int j=(sina-1)*m+1; j<=sina*m; j++)
                {
                    for(int k=1; k<=m; k++)
                    {
                        g << c[j][k];
                    }
                    g << '\n';
                }
            }
            else
            {
                for(int j=sina*m; j>=(sina-1)*m+1; j--)
                {
                    for(int k=m; k>=1; k--)
                    {
                        g << c[j][k];
                    }
                    g << '\n';
                }
            }
        }
    }
    else
    {
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
                ma[i][j]=h;
        }
        for(int i=1; i<=s; i++)
        {
            for(int j=1; j<=m; j++)
            {
                for(int k=1; k<=m; k++)
                {
                    f >> c[j+(m*(i-1))][k];
                }
            }
        }
        string drum;
        f >> drum;
        int inceput=1;
        int orientare=3;
        int it=1, jt=1, its=1, jts=1, i=0;
        bool again=false;
        while(drum[i]!='\0')
        {
            int sina=inceput%s;
            if(sina==0)
                sina=s;
            its=it-1;
            if(orientare==1)
            {
                for(int k=m; k>=1; k--)
                {
                    its++;
                    jts=jt;
                    for(int j=(sina-1)*m+1; j<=sina*m; j++)
                    {
                        if(c[j][k]=='S')
                        {
                            if(ma[its][jts]!=0)
                                ma[its][jts]--;
                        }
                        else if(c[j][k]=='A')
                        {
                            ma[its][jts]++;
                        }
                        jts++;
                    }
                }
            }
            else if(orientare==2)
            {
                for(int k=1; k<=m; k++)
                {
                    its++;
                    jts=jt;
                    for(int j=sina*m; j>=(sina-1)*m+1; j--)
                    {
                        if(c[j][k]=='S')
                        {
                            if(ma[its][jts]!=0)
                                ma[its][jts]--;
                        }
                        else if(c[j][k]=='A')
                        {
                            ma[its][jts]++;
                        }
                        jts++;
                    }
                }
            }
            else if(orientare==3)
            {
                for(int j=(sina-1)*m+1; j<=sina*m; j++)
                {
                    its++;
                    jts=jt;
                    for(int k=1; k<=m; k++)
                    {
                        if(c[j][k]=='S')
                        {
                            if(ma[its][jts]!=0)
                                ma[its][jts]--;
                        }
                        else if(c[j][k]=='A')
                        {
                            ma[its][jts]++;
                        }
                        jts++;
                    }
                }
            }
            else
            {
                for(int j=sina*m; j>=(sina-1)*m+1; j--)
                {
                    its++;
                    jts=jt;
                    for(int k=m; k>=1; k--)
                    {
                        if(c[j][k]=='S')
                        {
                            if(ma[its][jts]!=0)
                                ma[its][jts]--;
                        }
                        else if(c[j][k]=='A')
                        {
                            ma[its][jts]++;
                        }
                        jts++;
                    }
                }
            }
            inceput++;
            if(drum[i]=='N')
                orientare=1, it-=m;
            else if(drum[i]=='S')
                orientare=2, it+=m;
            else if(drum[i]=='E')
                orientare=3, jt+=m;
            else
                orientare=4, jt-=m;
            i++;
            if(drum[i]=='\0'&&again==false)
                i--, again=true;
        }
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=n; j++)
            {
                if(ma[i][j]>9)
                    g << 'Z';
                else
                    g << ma[i][j];
            }
            g << '\n';
        }
    }
    return 0;
}