-1,0,1的妙用-hdu1997刷水笔记
#include<stdio.h>
int main()
{
int s, e, t, n, i, j, nn, a[3][128], r[128], p[3];
scanf("%d", &t);
while (t--)
{
p[0] = p[1] = p[2] = 0;
scanf("%d", &n);
for (i = 0; i < 3; i++)
{
scanf("%d", &nn);
for (j = 0; j < nn; j++)
scanf("%d", &a[i][j]);
}
for (i = 0; i < n; i++)
for (j = 0; j < 3; j++)
if (a[j][p[j]] == (n - i))
{
r[i] = j - 1;
p[j]++;
}
s = -1;
e = 1;
for (i = 0; i < n; i++)
if (r[i] == s)
e = -(s + e);
else if (r[i] == e)
s = -(s + e);
else
break;
printf(i == n ? "true\n" : "false\n");
}
return 0;
}
这是一道汉诺塔适应题,按正常玩汉诺塔的思路就可解,关键我的代码只是用这三个数字的关系来模拟知道三个柱子中的两个,另一个是哪个

浙公网安备 33010602011771号