Pagini recente » Cod sursa (job #1634495) | Cod sursa (job #1808915) | Cod sursa (job #853126) | Cod sursa (job #3199447) | Cod sursa (job #1347726)
#include <fstream>
using namespace std;
#define fileIn "matperm2.in"
#define fileOut "matperm2.out"
#define maxN 1004
#define maxM 1004
#define maxQ 1001
#define maxP 2000000005
struct coord
{
short x, y;
};
short base, baseSol;
coord perm[2][maxN][maxM];
coord sol[2][maxN][maxM];
int n, m;
void addSol()
{
int i, k;
for ( i = 1; i <= n; ++i )
{
for ( k = 1; k <= m; ++k )
{
sol[!baseSol][i][k] = sol[baseSol][perm[base][i][k].x][perm[base][i][k].y];
}
}
baseSol = !baseSol;
}
void powerUp()
{
int i, k;
for ( i = 1; i <= n; ++i )
{
for ( k = 1; k <= m; ++k )
{
perm[!base][i][k] = perm[base][perm[base][i][k].x][perm[base][i][k].y];
}
}
base = !base;
}
int main()
{
ifstream sIn( fileIn );
ofstream sOut( fileOut );
int p, i, k, q;
sIn >> n >> m >> p;
int yt, xt, x0, y0;
for ( i = 1; i <= n; ++i )
{
sIn >> yt;
for ( k = 1; k <= m; ++k )
{
sol[baseSol][yt][k].x = perm[base][yt][k].x = i;
}
}
for ( i = 1; i <= m; ++i )
{
sIn >> yt;
for ( k = 1; k <= n; ++k )
{
sol[baseSol][k][yt].y = perm[base][k][yt].y = i;
}
}
sIn >> q;
for ( i = 1; i <= q; ++i )
{
sIn >> x0 >> y0 >> xt >> yt;
sol[baseSol][x0][y0] = perm[base][xt][yt];
sol[baseSol][xt][yt] = perm[base][x0][y0];
perm[base][x0][y0] = sol[baseSol][x0][y0];
perm[base][xt][yt] = sol[baseSol][xt][yt];
}
--p;
for ( i = 0; i < 32; ++i )
{
if ( p & ( 1 << i ) )
{
addSol();
p -= ( 1 << i );
}
if ( !p )
break;
powerUp();
}
for ( i = 1; i <= n; ++i )
{
for ( k = 1; k < m; ++k )
sOut << ( sol[baseSol][i][k].x - 1 ) * m + sol[baseSol][i][k].y << ' ';
sOut << ( sol[baseSol][i][k].x - 1 ) * m + sol[baseSol][i][k].y;
sOut << '\n';
}
return 0;
}