思路是直接按照题意模拟。利用递归。O(nlog)。
不知道wsmWA了。
# define _CRT_SECURE_NO_WARNINGS
# include <cstdio>
# include <cstring>
namespace Main {
namespace Sourse {
typedef long unsigned int lu;
}
using namespace Sourse;
enum { S = 200000 };
static char a[S + 1], b[S + 1];
static inline const bool eq(const lu l, const lu sa, const lu sb) {
bool f(true);
for (register lu i(0); i < l; ++i) f = f && a[sa + i] == b[sb + i];
return f || !(l % 2) && eq(l / 2, sa, sb + l / 2) && eq(l / 2, sa + l / 2, sb);
}
static inline const void main() {
scanf("%s%s", a, b);
puts(eq(strlen(a), 0, 0) ? "YES" : "NO");
}
}
signed int main() { Main::main(); return 0; }