Cod sursă (job #819710)
Utilizator |
|
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;
}