题意就是遇到相同字母用一个1*2或2*1的矩形填充,矩形有三个颜色,相同颜色的不能放在一起,求有多少种放法。
参考题解说一下。
将矩形分为两类,竖着放的为X,横着的放为Y。开始X:sum=3,Y:sum=6;
然后从左到右放。
X -> X : sum*2;
X -> Y : sum*2;
Y -> X : sum*1;
Y -> Y : sum*3;
AC代码
#include <iostream>
#include <algorithm>
#include <string.h>
#include <queue>
#include <stdio.h>
#include <set>
#include <vector>
using namespace std;
int main()
{
int n,i,j;
char s1[100],s2[100];
scanf("%d",&n);
scanf("%s%s",s1,s2);
int flag;
long long int ans;
if(s1[0]==s2[0])
ans=3,i=1,flag=1;
else
ans=6,i=2,flag=2;
for(;i<n;i++)
{
if(s1[i]==s2[i]&&flag==1)
{
ans=(ans*2)%1000000007;
flag=1;
}
else if(s1[i]!=s2[i]&&flag==1)
{
ans=(ans*2)%1000000007;
i++;
flag=2;
}
else if(flag==2&&s1[i]==s2[i])
{
flag=1;
}
else
{
ans=(ans*3)%1000000007;
flag=2;
i++;
}
}
printf("%lld\n",ans%1000000007);
return 0;
}