标签:
http://acm.hdu.edu.cn/showproblem.php?pid=4346
4 ?G RG? ??? ????
0 1 1 4
/**
http://blog.csdn.net/julyana_lin/article/details/7849006
*/
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <iostream>
using namespace std;
typedef long long LL;
const int mod=1000000007;
LL mod_pow(int a,int n,int p)
{
LL ret=1;
LL A=a;
while(n)
{
if(n&1)
{
ret=(ret*A)%p;
}
A=(A*A)%p;
n>>=1;
}
return ret;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
char a[1005];
scanf("%s",a);
int n=strlen(a);
int unknown=0,r_num=0;
for(int i=0;i<n;i++)
{
if(a[i]=='?')
unknown++;
else if(a[i]=='R')
r_num++;
}
LL unbea=(r_num==0);
for(int i=0;i<n;i++)
{
if(a[i]=='R'||a[i]=='?')
{
int x=(a[i]=='R');
unbea=(unbea+(x==r_num))%mod;
for(int len=1;len+i<n;len+=2)
{
int y=x;
for(int j=i+len;j<n;j+=len)
{
y+=(a[j]=='R');
if(a[j]=='G')break;
unbea=(unbea+(y==r_num))%mod;
}
}
}
}
printf("%I64d\n",mod_pow(2,unknown,mod)-unbea);
}
return 0;
}
标签:
原文地址:http://blog.csdn.net/lvshubao1314/article/details/43602271