链接:http://acm.hdu.edu.cn/showproblem.php?pid=4901
题意:不说了。
思路:也不说了。
把文章置顶就是想告诉自己不要脑残,不要手残,做题时要保持冷静。
改了一个1变成0以后就AC了。
代码:
#include <cmath>
#include <map>
#include <cstdlib>
#include <queue>
#include <stack>
#include <vector>
#include <ctype.h>
#include <algorithm>
#include <string>
#include <set>
#define PI acos(-1.0)
#define maxn 10005
#define INF 0x7fffffff
#define eps 1e-8
typedef __int64 LL;
typedef unsigned long long ULL;
using namespace std;
LL MOD=1000000007;
int aa[1155];
LL dp1[1155][1155];
LL dp2[1155][1155];
LL dp3[1155][1155];
LL dp4[1155][1155];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(dp1,0,sizeof(dp1));
memset(dp2,0,sizeof(dp2));
memset(dp3,0,sizeof(dp3));
memset(dp4,0,sizeof(dp4));
int tot;
scanf("%d",&tot);
for(int i=0; i<tot; i++)
scanf("%d",&aa[i]);
if(tot<=1)
printf("0\n");
else
{
dp1[0][aa[0]]=1;
for(int i=1; i<tot; i++)
{
for(int j=0; j<1024; j++)
{
dp2[i][j]+=((dp1[i-1][j]+dp2[i-1][j])%MOD);
int t=aa[i]^j;
dp1[i][t]+=dp1[i-1][j];
dp1[i][t]%=MOD;
dp1[i][t]+=dp2[i-1][j];
dp1[i][t]%=MOD;
}
dp1[i][aa[i]]++;
dp1[i][aa[i]]%=MOD;
}
dp3[tot-1][aa[tot-1]]=1;
for(int i=tot-2; i>=0; i--)
{
for(int j=0; j<1024; j++)//就是这里,循环我写成了从1开始
{
dp4[i][j]+=((dp3[i+1][j]+dp4[i+1][j])%MOD);
int t=aa[i]&j;
dp3[i][t]+=dp3[i+1][j];
dp3[i][t]%=MOD;
dp3[i][t]+=dp4[i+1][j];
dp3[i][t]%=MOD;
}
dp3[i][aa[i]]++;
dp3[i][aa[i]]%=MOD;
}
LL ans=0;
for(int i=0; i<tot-1; i++)
{
for(int j=0; j<1024; j++)
{
if(dp1[i][j]>0&&dp3[i+1][j]+dp4[i][j]>0)
ans+=(dp1[i][j]*dp3[i+1][j]+dp1[i][j]*dp4[i+1][j]);
ans%=MOD;
}
}
printf("%I64d\n",ans);
}
}
return 0;
}