【CROC 2016 - Elimination RoundA】【水题 循环暴力】Amity Assessment 2x2华容道

Amity Assessment
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output

Bessie the cow and her best friend Elsie each received a sliding puzzle on Pi Day. Their puzzles consist of a 2 × 2 grid and three tiles labeled 'A', 'B', and 'C'. The three tiles sit on top of the grid, leaving one grid cell empty. To make a move, Bessie or Elsie can slide a tile adjacent to the empty cell into the empty cell as shown below:

【CROC 2016 - Elimination RoundA】【水题 循环暴力】Amity Assessment 2x2华容道_第1张图片

In order to determine if they are truly Best Friends For Life (BFFLs), Bessie and Elsie would like to know if there exists a sequence of moves that takes their puzzles to the same configuration (moves can be performed in both puzzles). Two puzzles are considered to be in the same configuration if each tile is on top of the same grid cell in both puzzles. Since the tiles are labeled with letters, rotations and reflections are not allowed.

Input

The first two lines of the input consist of a 2 × 2 grid describing the initial configuration of Bessie's puzzle. The next two lines contain a2 × 2 grid describing the initial configuration of Elsie's puzzle. The positions of the tiles are labeled 'A', 'B', and 'C', while the empty cell is labeled 'X'. It's guaranteed that both puzzles contain exactly one tile with each letter and exactly one empty position.

Output

Output "YES"(without quotes) if the puzzles can reach the same configuration (and Bessie and Elsie are truly BFFLs). Otherwise, print "NO" (without quotes).

Examples
input
AB
XC
XB
AC
output
YES
input
AB
XC
AC
BX
output
NO
Note

The solution to the first sample is described by the image. All Bessie needs to do is slide her 'A' tile down.

In the second sample, the two puzzles can never be in the same configuration. Perhaps Bessie and Elsie are not meant to be friends after all...

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<string>
#include<ctype.h>
#include<math.h>
#include<set>
#include<map>
#include<vector>
#include<queue>
#include<bitset>
#include<algorithm>
#include<time.h>
using namespace std;
void fre() { freopen("c://test//input.in", "r", stdin); freopen("c://test//output.out", "w", stdout); }
#define MS(x,y) memset(x,y,sizeof(x))
#define MC(x,y) memcpy(x,y,sizeof(x))
#define MP(x,y) make_pair(x,y)
#define ls o<<1
#define rs o<<1|1
typedef long long LL;
typedef unsigned long long UL;
typedef unsigned int UI;
template <class T1, class T2>inline void gmax(T1 &a, T2 b) { if (b>a)a = b; }
template <class T1, class T2>inline void gmin(T1 &a, T2 b) { if (b<a)a = b; }
const int N = 0, M = 0, Z = 1e9 + 7, ms63 = 0x3f3f3f3f;
char s[10];
char t[10];
char w[10];
char v[10];
bool solve()
{
	int n = 0;
	for (int i = 0; i < 4; ++i)if (t[i] != 'X')w[n++] = t[i];
	for (int i = 0; i < 4; ++i)
	{
		int m = 0;
		for (int j = 0; j < 4; ++j)if (s[i + j] != 'X')v[m++] = s[i+j];
		int j; for (j = 0; j < 3; ++j)if (v[j] != w[j])break;
		if (j == 3)return 1;
	}
	return 0;
}
int Xsolve()
{
	char s[3][3];//还是要开+1size
	int a[2];
	for (int o = 0; o < 2; ++o)
	{
		scanf("%s%s", s[0], s[1]);
		if (s[0][0] == 'X')a[o] = s[1][0] - s[0][1];
		else if (s[0][1] == 'X')a[o] = s[0][0] - s[1][1];
		else if (s[1][1] == 'X')a[o] = s[0][1] - s[1][0];
		else if (s[1][0] == 'X')a[o] = s[1][1] - s[0][0];
	}
	return (a[0]+3)%3 == (a[1]+3)%3;
}
int main()
{
	puts(Xsolve() ? "YES" : "NO"); 
	return 0;
	while (~scanf("%s%s%s%s", s,s+2,t,t+2))
	{
		swap(s[2], s[3]);
		swap(t[2], t[3]);
		for (int i = 0; i < 4; ++i)s[i + 4] = s[i];
		puts(solve() ? "YES" : "NO");
	}
	return 0;
}
/*
【trick&&吐槽】
做水题就要拿出消灭水题的样子>_<

【题意】
给你两个2*2的格子图。
对于每个格子图,有3个格子是字符ABC,剩下一个格子是空的X。
我们每次可以把一个格子移动到其相邻的空格中。
问你两个格子图是否可以移成相同的图样。

【类型】
水题

【分析】
因为对于这种模型,再怎么移也同样保留原始的时针顺序。
于是我们成环,暴力匹配就好啦。
另外一种解法是我们查看X两边字符的数值关系。

*/


你可能感兴趣的:(水题,codeforces,题库-CF)