Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Problema slide  (Citit de 12381 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
NicuCJ
Strain
*

Karma: 6
Deconectat Deconectat

Mesaje: 44



Vezi Profilul
« : Februarie 19, 2013, 15:36:33 »

http://campion.edu.ro/arhiva/index.php?page=problem&action=view&id=1344

Am facut o solutie care pare buna (am testat-o pe mai multe teste si se pare ca da bine). Am procedat asa: am facut o matrice "jos", continand matricea de pe fata 1 si mai jos de ea matricea de pe fata 2 intoarsa cu capul in jos (pentru ca nr care urca pe prima fata este primul nr de pe fata 2), si o matrice "stanga", unde am pus matricea de pe fata 1 si la dreapta (stiu ca trebuia sa o numesc "dreapta") am pus cea de pe fata 2.
Apoi, bazandu-ma pe periodicitate, am facut operatiile in M*2N (refac linia/coloana curenta de pe matricea "jos" si "stanga"), punand rezultatul intr-o alta matrice.
La final, afisez rezultatul...

Am si sursa aici:

Cod:
#include <fstream>
using namespace std;
char x[5001];
int incln[1001], inccl[1001];
short mat[1001][1001], jos[2002][1001], stanga[2001][1001], vec[2002];
int k, i, n, nr, m, as, df, j;
char cr;
int main()
{
ifstream f("slide.in");
ofstream g("slide.out");
f>>n;
f.getline(x, 10);
for(i=1; i<=n; i++)
{
f.getline(x, 5001);
int p=strlen(x);
k=0;
incln[i]=1;
for(j=0; j<p; j++)
{
if(isdigit(x[j]))
{
nr=0;
while(isdigit(x[j]))
{
nr=nr*10+x[j]-48;
j++;
}
k++;
inccl[i]=i;
incln[i]=1;
mat[i][k]=nr;
}
}
}
int l2=2*n, k2;
for(i=1; i<=n; i++)
{
f.getline(x, 5001);
int p=strlen(x);
k=0;
k2=n+1;
for(j=0; j<p; j++)
{
if(isdigit(x[j]))
{
nr=0;
while(isdigit(x[j]))
{
nr=nr*10+x[j]-48;
j++;
}
k++;
jos[i][k]=mat[i][k];
k2--;
jos[l2][k]=nr;
stanga[i][k]=mat[i][k];
stanga[i][k+n]=nr;
}
}
l2--;
}
f>>m;
int contor;
for(int t=1; t<=m; t++)
{
f>>cr>>as>>df;
if(cr=='C')
{
inccl[as]=2*n-(df%(2*n))+1;
contor=0;
for(i=inccl[as]; contor<2*n; i++)
{
if(i>2*n)
i=1;
contor++;
if(contor<=n)
mat[contor][as]=jos[i][as];
vec[contor]=jos[i][as];
}
for(i=1; i<=2*n; i++)
{
jos[i][as]=vec[i];
if(i<=n)
stanga[i][as]=vec[i];
}
}
if(cr=='L')
{
incln[as]=2*n-(df%(2*n))+1;
contor=0;
for(i=incln[as]; contor<2*n; i++)
{
if(i>2*n)
i=1;
contor++;
if(contor<=n)
mat[as][contor]=stanga[as][i];
vec[contor]=stanga[as][i];
}
for(i=1; i<=2*n; i++)
{
stanga[as][i]=vec[i];
if(i<=n)
jos[as][i]=vec[i];
}
}
}
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
g<<mat[i][j]<<" ";
}
g<<"\n";
}
}

Mersi anticipat!
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines