13. MEŠALICA - rešenje
Rešenje - pomoću algoritma grube sile:
#include <iostream>
#include<vector>
#include<fstream> //dodatak za citanje iz datoteke
#define DATOTEKA "01.in" //dodatak za citanje iz datoteke
//Metoda za ispisivanje elemenata vektora
void ispisi(vector<int>& v)
{
for(vector < int >::iterator it=v.begin(); it != v.end(); ++it)
{
cout<<(*it)<<" ";
}
// cout<<endl;
}
int main()
{
//dodatak za citanje iz datoteke
/* fstream dataFile;
dataFile.open(DATOTEKA);
if (dataFile.fail())
{
cerr << "Error read data!" << endl;
system("PAUSE");
return 1;
}*/
int n;
long long m;
cin>>n>>m; //Treba iskluciti za citanje podataka iz datoteke
// dataFile>>n>>m; //dodatak za citanje iz datoteke
vector<int>niz;
vector<int>niz2(n);
vector<int>shema(n);
for(int i=0; i<n; i++)
{
int a;
cin>>a; //Treba iskluciti za citanje podataka iz datoteke
// dataFile>>a; //dodatak za citanje iz datoteke
niz.push_back(a);
shema[a]=i;
}
// dataFile.close(); //dodatak za citanje iz datoteke
for(int i=1; i<m; i++) //Ponavljanje mesnja niza, m puta
{
vector<int>niz2;
for(int j=0; j<n; j++)
{
int pozN = shema[j]; //iz šeme se čita nova poyicija za premeštanje
int s=niz[j]; //element za premeštanje na novu poziciju
niz2[pozN]=s;
}
niz=niz2;
}
ispisi(niz);
return 0;
}
#include<vector>
#include<fstream> //dodatak za citanje iz datoteke
#define DATOTEKA "01.in" //dodatak za citanje iz datoteke
//Metoda za ispisivanje elemenata vektora
void ispisi(vector<int>& v)
{
for(vector < int >::iterator it=v.begin(); it != v.end(); ++it)
{
cout<<(*it)<<" ";
}
// cout<<endl;
}
int main()
{
//dodatak za citanje iz datoteke
/* fstream dataFile;
dataFile.open(DATOTEKA);
if (dataFile.fail())
{
cerr << "Error read data!" << endl;
system("PAUSE");
return 1;
}*/
int n;
long long m;
cin>>n>>m; //Treba iskluciti za citanje podataka iz datoteke
// dataFile>>n>>m; //dodatak za citanje iz datoteke
vector<int>niz;
vector<int>niz2(n);
vector<int>shema(n);
for(int i=0; i<n; i++)
{
int a;
cin>>a; //Treba iskluciti za citanje podataka iz datoteke
// dataFile>>a; //dodatak za citanje iz datoteke
niz.push_back(a);
shema[a]=i;
}
// dataFile.close(); //dodatak za citanje iz datoteke
for(int i=1; i<m; i++) //Ponavljanje mesnja niza, m puta
{
vector<int>niz2;
for(int j=0; j<n; j++)
{
int pozN = shema[j]; //iz šeme se čita nova poyicija za premeštanje
int s=niz[j]; //element za premeštanje na novu poziciju
niz2[pozN]=s;
}
niz=niz2;
}
ispisi(niz);
return 0;
}
Rešenje pomoću algoritma brzog stepenovanja
#include <iostream>
#include<vector>
#include<fstream>
#define DATOTEKA "01.in"
using namespace std;
void ispisi(vector<int>& v)
{
for(vector < int >::iterator it=v.begin(); it != v.end(); ++it)
{
cout<<(*it)<<" ";
}
}
int main()
{
/* fstream dataFile;
dataFile.open(DATOTEKA);
if (dataFile.fail())
{
cerr << "Error read data!" << endl;
system("PAUSE");
return 1;
}*/
int n;
long long m;
cin>>n>>m;
// dataFile>>n>>m;
vector<int>niz;
vector<int>shema(n);
vector<int>niz2;
for(int i=0; i<n; i++)
{
int a;
cin>>a;
// dataFile>>a;
niz.push_back(a);
shema[a]=i;
}
// dataFile.close();
if(m==1)
{
ispisi(niz);
return 0;
}
m=m-1;
while(m>=1)
{
vector<int>niz2(n);
for(int j=0; j<n; j++)
{
int pozN;
if(m%2==1)
{
pozN= shema[j];
int s=niz[j];
niz2[pozN]=s;
}
else
{
//Transformacija sheme i sheme
pozN= shema[j];
int s=shema[pozN];
niz2[j]=s;
}
}
if(m==1)
{
ispisi(niz2);
return 0;
}
else if(m%2==1)
{
niz=niz2;
m--;
}
else
{
shema=niz2;
// ispisi(shema);
m/=2;
}
}
ispisi(niz2);
return 0;
}
#include<vector>
#include<fstream>
#define DATOTEKA "01.in"
using namespace std;
void ispisi(vector<int>& v)
{
for(vector < int >::iterator it=v.begin(); it != v.end(); ++it)
{
cout<<(*it)<<" ";
}
}
int main()
{
/* fstream dataFile;
dataFile.open(DATOTEKA);
if (dataFile.fail())
{
cerr << "Error read data!" << endl;
system("PAUSE");
return 1;
}*/
int n;
long long m;
cin>>n>>m;
// dataFile>>n>>m;
vector<int>niz;
vector<int>shema(n);
vector<int>niz2;
for(int i=0; i<n; i++)
{
int a;
cin>>a;
// dataFile>>a;
niz.push_back(a);
shema[a]=i;
}
// dataFile.close();
if(m==1)
{
ispisi(niz);
return 0;
}
m=m-1;
while(m>=1)
{
vector<int>niz2(n);
for(int j=0; j<n; j++)
{
int pozN;
if(m%2==1)
{
pozN= shema[j];
int s=niz[j];
niz2[pozN]=s;
}
else
{
//Transformacija sheme i sheme
pozN= shema[j];
int s=shema[pozN];
niz2[j]=s;
}
}
if(m==1)
{
ispisi(niz2);
return 0;
}
else if(m%2==1)
{
niz=niz2;
m--;
}
else
{
shema=niz2;
// ispisi(shema);
m/=2;
}
}
ispisi(niz2);
return 0;
}