玲珑学院 1050 - array--dp

1050 - array

Time Limit:3s Memory Limit:64MByte

Submissions:474Solved:144

DESCRIPTION

2 array is an array, which looks like:
1,2,4,8,16,32,64......1,2,4,8,16,32,64......
a1=1  | ai+1ai=2a1=1  | ai+1ai=2
Give you a number array, and your mission is to get the number of subsequences ,which is 2 array, of it.
Note: 2 array is a finite array.

INPUT
There are multiple test cases.The first line is a number T ( T 10T ≤10), which means the number of cases.For each case, two integer n(1n105)n(1≤n≤105).The next line contains nn numbers ai(1ai109)ai(1≤ai≤109)
OUTPUT
one line - the number of subsequence which is 2 array.(the answer will % 109+7% 109+7)
SAMPLE INPUT
2
4
1 2 1 2
4
1 2 4 4
SAMPLE OUTPUT
5
4
#include<cstdio>
#include<cstring>
#include<algorithm>
typedef long long LL;
using namespace std;
const LL mod = 1e9 + 7;
const int N = 1e5 + 10;
int a[N];
int dp[35];
int main()
{
	int t,n;
	scanf("%d",&t);
	while(t--)
	{
		memset(dp,0,sizeof(dp));
		scanf("%d",&n);
		for(int i = 1; i <= n; i++)
		   scanf("%d",&a[i]);
		for(int i = 1; i <= n; i++)
		   for(int j = 0; j <= 30; j++)
		   {
		   	  if(a[i] == (1 << j))
		   	  {
		   	  	 if(j)
		   	  	    dp[j] = (dp[j] + dp[j-1]) % mod;
		   	  	 else
		   	  	    dp[j]++; 
				 }
		   }
		LL ans = 0; 
		for(int i = 0; i <= 30; i++){
			ans = (ans + dp[i]) % mod; 
		}
		printf("%lld\n",ans);
	}
	return 0;
}
 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值