题目很简单,就是给你一个门电路,问开关变化多少次能到达目的状态。
这个题目看起来好像无从下手,但是如果找到一个规律你就能很快解决了。
规律就是只要计算出第一次从输出0-1需要变换开关的次数,其余从0-1,1-0状态只要改变1次开关就能到达。
#include <iostream>
using namespace std;
int t,n,men[10005],m;
char st[10050];
int kg(int i)
{
if(i*2+1>=n)
{
if(men[i]==0)
return 1;
else
return 2;
}
else
{
if(men[i]==1)
return kg(i*2+1)+kg(i*2+2);
else
return min(kg(i*2+1),kg(i*2+2));
}
}
int main()
{
int i,j,res,m;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
scanf("%s",st);
for(i=0;i<n-1;i++)
scanf("%d",&men[i]);
res=0;
m=kg(0);
for(i=0;st[i];i++)
if(st[i] != '0')
break;
if(st[i])
res += m;
i++;
for(;st[i];i++)
if(st[i-1] != st[i])
res ++;
printf("%d\n",res);
}
return 0;
}