Magic Square
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 202 Accepted Submission(s): 176
Problem Description
A magic square is a 3×3 square, where each element is a single digit between 1 and 9 inclusive, and each digit appears exactly once. There are 4 different contiguous 2×2 subsquares in a magic squares, which are labeled from 1 to 4 as the following figure shows. These 2×2 subsquares can be rotated. We use the label of the subsquare with an uppercase letter to represent a rotation. If we rotate the subsquare clockwise, the letter is 'C'; if we rotate it counterclockwise, the letter is 'R'. The following figure shows two different rotations.
Now, given the initial state of a magic square and a sequence of rotations, please print the final state of the magic square after these rotations are performed.
Input
The first line of input is a single integer T (1≤T≤100), the number of test cases.
Each test case begins with a single integer n (1≤n≤100), the number of rotations. It is then followed by a 3×3 square, where every digit between 1 and 9 inclusive appears exactly once, representing the initial state of the magic square. The following n lines describe the sequence of rotations.
The test data guarantees that the input is valid.
Output
For each test case, display a 3×3 square, denoting the final state of the magic square.
Sample Input
1
2
123
456
789
1C
4R
Sample Output
413
569
728
Source
2018 Multi-University Training Contest 8
#include<bits/stdc++.h>
using namespace std;
#define e exp(1)
#define pi acos(-1)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define ll long long
#define ull unsigned long long
#define mem(a,b) memset(a,b,sizeof(a))
int gcd(int a,int b){return b?gcd(b,a%b):a;}
char s[5][5];
void change(char n,char q)
{
int x,y;
if(n=='1')
x=0,y=0;
else if(n=='2')
x=0,y=1;
else if(n=='3')
x=1,y=0;
else
x=1,y=1;
char a=s[x][y];
char b=s[x][y+1];
char c=s[x+1][y];
char d=s[x+1][y+1];
if(q=='C')
{
s[x][y]=c;
s[x][y+1]=a;
s[x+1][y]=d;
s[x+1][y+1]=b;
}
else if(q=='R')
{
s[x][y]=b;
s[x][y+1]=d;
s[x+1][y]=a;
s[x+1][y+1]=c;
}
}
int main()
{
int T;scanf("%d",&T);
while(T--)
{
int m;scanf("%d",&m);
for(int i=0; i<3; i++)scanf("%s",s[i]);
while(m--)
{
char cc[3];scanf("%s",cc);
change(cc[0],cc[1]);
}
for(int i=0; i<3; i++)printf("%s\n",s[i]);
}
return 0;
}