hdu6401(模拟)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yu121380/article/details/81739366

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;
}

猜你喜欢

转载自blog.csdn.net/yu121380/article/details/81739366
今日推荐