链接: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; }