题目大意:给定一个N*N的黑白位图,有7种操作,并且对应在指令后加上‘-’即为操作的逆,给定N和一系列操作,(从最后一个开始执行),问说这一套指令需要执行多少次才能形成循环。
解题思路:模拟指令执行后获得一个置换,分解成若干的循环,各个循环长度的最小公倍数即使答案。
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int maxn = (1<<10) + 5;
int N, s[maxn][maxn], f[maxn][maxn];
int c, v[maxn];
const char sign[maxn][10] = {
"id", "id-", "rot", "rot-", "sym", "sym-", "bhsym", "bhsym-", "bvsym",
"bvsym-", "div", "div-", "mix", "mix-" };
inline int get_sign (char* word) {
for (int i = 0; i < 14; i++)
i