标签:des style blog color os strong io for
#include<cstdio> #include<cstring> typedef __int64 LL; #define mod 1000000007 const int MAXN = 1002; const int MAXA = 1025; int dp1[MAXN][MAXA], dp2[MAXN][MAXA], dp3[MAXN][MAXA]; int a[MAXN]; int main() { int T, n, i, j, t; scanf("%d",&T); while(T--) { scanf("%d",&n); for(i = 0; i < n; i++) scanf("%d",&a[i]); memset(dp1, 0, sizeof(dp1)); memset(dp2, 0, sizeof(dp2)); memset(dp3, 0, sizeof(dp3)); dp1[0][a[0]] = 1; for(i = 1; i < n - 1; i++) { dp1[i][a[i]]++; //单独一个元素构成一个集合 for(j = 0; j < MAXA; j++) { if(dp1[i-1][j]) { dp1[i][j] += dp1[i-1][j]; //不添加第i个元素进行异或,继承之前算好的 dp1[i][j] %= mod; t = j ^ a[i]; //添加第i个元素进行异或 dp1[i][t] += dp1[i-1][j]; dp1[i][t] %= mod; } } } dp2[n-1][a[n-1]] = 1; dp3[n-1][a[n-1]] = 1; for(i = n-2; i > 0; i--) { dp2[i][a[i]]++; dp3[i][a[i]]++; //单独一个元素构成一个集合 for(j = 0; j < MAXA; j++) { if(dp2[i+1][j]) { dp2[i][j] += dp2[i+1][j]; //不添加第i个元素进行按位与 dp2[i][j] %= mod; t = j & a[i]; //添加第i个元素进行按位与 dp2[i][t] += dp2[i+1][j]; dp2[i][t] %= mod; dp3[i][t] += dp2[i+1][j]; //添加第i个元素进行按位与 dp3[i][t] %= mod; } } } int ans = 0; for(i = 0; i < n - 1; i++) { for(j = 0; j < MAXA; j++) { if(dp1[i][j] && dp3[i+1][j]) { ans += (LL(dp1[i][j]) * dp3[i+1][j] % mod); ans %= mod; } } } printf("%d\n", ans); } return 0; }
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 const int maxn=1e3+10; 6 const int maxm=1024*2; 7 const int mod=1e9+7; 8 int n,a[maxn]; 9 int dp[maxn][maxm][2],dps[maxn][maxm][2]; 10 int main() 11 { 12 int T; 13 scanf("%d",&T); 14 while(T--) 15 { 16 scanf("%d",&n); 17 int maxi=0; 18 for(int i=1;i<=n;i++) 19 scanf("%d",&a[i]); 20 memset(dp,0,sizeof(dp)); 21 memset(dps,0,sizeof(dps)); 22 for(int i=1;i<=n;i++) 23 { 24 dp[i][a[i]][0]=1; 25 dps[i][a[i]][0]=1; 26 for(int j=0;j<maxm;j++) 27 if(dp[i-1][j][0]) 28 { 29 dp[i][j][0]=(dp[i][j][0]+dp[i-1][j][0])%mod; 30 dp[i][j^a[i]][0]=(dp[i][j^a[i]][0]+dp[i-1][j][0])%mod; 31 dps[i][j^a[i]][0]=(dps[i][j^a[i]][0]+dp[i-1][j][0])%mod; 32 } 33 } 34 for(int i=n;i>=1;i--) 35 { 36 dp[i][a[i]][1]=1; 37 for(int j=0;j<maxm;j++) 38 if(dp[i+1][j][1]) 39 { 40 dp[i][j][1]=(dp[i][j][1]+dp[i+1][j][1])%mod; 41 dp[i][j&a[i]][1]=(dp[i][j&a[i]][1]+dp[i+1][j][1])%mod; 42 } 43 } 44 long long ans=0; 45 for(int i=1;i<n;i++) 46 for(int j=0;j<maxm;j++) 47 if(dps[i][j][0]) 48 ans=(ans+(long long)dps[i][j][0]*(long long)dp[i+1][j][1])%mod; 49 printf("%I64d\n",ans); 50 } 51 return 0; 52 }
The Romantic Hero,布布扣,bubuko.com
标签:des style blog color os strong io for
原文地址:http://www.cnblogs.com/767355675hutaishi/p/3890374.html