唉,这个题我光研究别人的代码就研究了三天,最后还是在学长的解释下才终于明白了,真的做的好艰辛啊!
其实就是递推的,按照当前的顺序然后在继续往下做,看看能不能做下去就行了!
这个是我借用牛人的代码:
#include <iostream>
using namespace std;
int main(void)
{
int i, t, a, b, c, N, T;
int one[4],n[4],h[4][1000];
scanf("%d",&T);
while (T--)
{
int flag = 0;
a=1, b=2, c=3;
one[a]=1;one[b]=1;one[c]=1;
scanf("%d",&N);
scanf("%d",&n[a]);
for (i=one[a];i<=n[a];i++)
scanf("%d",&h[a][i]);
scanf("%d",&n[b]);
for (i=one[b];i<=n[b];i++)
scanf("%d",&h[b][i]);
scanf("%d",&n[c]);
for (i=one[c];i<=n[c];i++)
scanf("%d",&h[c][i]);
while (1)
{
if (n[a] == N || n[c] == N)
{
flag = 1;
break;
}
if (n[b]>0 && h[b][one[b]]==N)
{
flag = 0;
break;
}
if (n[a]>0&&h[a][one[a]]==N)
{
N--;
n[a]--;
one[a]++;
t=b;
b=c;
c=t;
continue;
}
if (n[c]>0&&h[c][one[c]]==N)
{
N--;
n[c]--;
one[c]++;
t=a;
a=b;
b=t;
continue;
}
}
if (flag)
printf("true\n");
else
printf("false\n");
}
return 0;
}