本文主要是介绍【CROC 2016 - Elimination RoundA】【水题 循环暴力】Amity Assessment 2x2华容道,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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:
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.
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 "YES"(without quotes) if the puzzles can reach the same configuration (and Bessie and Elsie are truly BFFLs). Otherwise, print "NO" (without quotes).
AB XC XB AC
YES
AB XC AC BX
NO
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];//还是要开+1sizeint 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两边字符的数值关系。*/
这篇关于【CROC 2016 - Elimination RoundA】【水题 循环暴力】Amity Assessment 2x2华容道的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!