您的位置:首页 > 产品设计 > UI/UE

HDOJ 题目5496 Beauty of Sequence(数学)

2015-10-05 00:28 357 查看

Beauty of Sequence

Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)

Total Submission(s): 363 Accepted Submission(s): 161



[align=left]Problem Description[/align]
Sequence is beautiful and the beauty of an integer sequence is defined as follows: removes all but the first element from every consecutive group of equivalent elements of the sequence (i.e. unique function in C++ STL) and the summation
of rest integers is the beauty of the sequence.

Now you are given a sequence A
of n
integers {a1,a2,...,an}.
You need find the summation of the beauty of all the sub-sequence of
A.
As the answer may be very large, print it modulo 109+7.

Note: In mathematics, a sub-sequence is a sequence that can be derived from another sequence by deleting some elements without changing the order of the remaining elements. For example
{1,3,2}
is a sub-sequence of {1,4,3,5,2,1}.

[align=left]Input[/align]
There are multiple test cases. The first line of input contains an integer
T,
indicating the number of test cases. For each test case:

The first line contains an integer n
(1≤n≤105),
indicating the size of the sequence. The following line contains
n
integers a1,a2,...,an,
denoting the sequence (1≤ai≤109).

The sum of values n
for all the test cases does not exceed 2000000.

[align=left]Output[/align]
For each test case, print the answer modulo
109+7
in a single line.

[align=left]Sample Input[/align]

3
5
1 2 3 4 5
4
1 2 1 3
5
3 3 2 1 2


[align=left]Sample Output[/align]

240
54
144


[align=left]Source[/align]
BestCoder Round #58 (div.2)

[align=left]Recommend[/align]
hujie | We have carefully selected several similar problems for you: 5498 5497 5496 5495 5494

题目大意:所有子序列的和

150135052015-10-05 00:15:09Accepted54961700MS2816K782 BC++弱渣在努力T^T
ac代码

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<map>
#define LL __int64
#define mod 1000000007
using namespace std;
LL same[100010];
LL qpow(LL a,int b)
{
LL ans=1;
while(b)
{
if(b&1)
ans=(ans*a)%mod;
a=(a*a)%mod;
b>>=1;
}
return ans;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
int i;
map<LL,int>mp;
LL ans=0;
for(i=1;i<=n;i++)
{
LL x;
scanf("%I64d",&x);
if(mp.count(x)==0)
{
same[i]=0;
ans=(ans+qpow(2,n-1)*x%mod)%mod;
}
else
{
ans=(ans+(((qpow(2,i-1)-same[mp[x]])*qpow(2,n-i))%mod*x)%mod)%mod;
same[i]=same[mp[x]];
}
same[i]=(same[i]+qpow(2,i-1))%mod;
mp[x]=i;
}
printf("%I64d\n",(ans+mod)%mod);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: