hdu Beauty of Sequence (好题_集合问题)
2015-10-05 19:01
351 查看
问题描述
输入描述
输出描述
输入样例
输出样例
考虑每个数字对最终答案的贡献. 对于每个数, 我们只算它出现在连续相同元素的第一个时的贡献, 这样会使计算简便很多. 假设这个数是a[i]a[i],
那么i后面的随便选有2^{n-i}2n−i种.
考虑a[i]a[i]前面的数,
要么一个不选, 要么选择的最后一个数和a[i]a[i]不同,
然后就可以算出来了.
给出一个整数序列, 去除序列中连续相邻的重复元素(只保留一个), 剩下来的数的和称之为序列的beauty. 现在给你一个长度为nn的整数序列AA. 问序列AA的所有子序列的beauty的和是多少. 由于答案可能很大, 你只要输出答案对10^9+7109+7取模的结果. Note: 在数学中,某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。 例如\{1,3,2\}{1,3,2} 是\{1, 4, 3, 5, 2, 1\}{1,4,3,5,2,1}的一个子序列.
输入描述
输入有多组数据. 第一行包含一个整数TT表示测试数据的组数. 对于每组数据: 第一行有一个整数n (1 \le n \le 10^5)n(1≤n≤105), 表示序列的大小. 接下来一行包含nn个整数a_1,a_2,...,a_na1,a2,...,an, 表示序列AA, (1 \le a_i \le 10^9)(1≤ai≤109).
输出描述
对于每组数据, 输出答案对10^9+7109+7取模的结果.
输入样例
3 5 1 2 3 4 5 4 1 2 1 3 5 3 3 2 1 2
输出样例
240 54 144
考虑每个数字对最终答案的贡献. 对于每个数, 我们只算它出现在连续相同元素的第一个时的贡献, 这样会使计算简便很多. 假设这个数是a[i]a[i],
那么i后面的随便选有2^{n-i}2n−i种.
考虑a[i]a[i]前面的数,
要么一个不选, 要么选择的最后一个数和a[i]a[i]不同,
然后就可以算出来了.
#include<stdio.h> #include<string.h> #include<map> #include<algorithm> using namespace std; typedef long long LL; const LL Mod = 1e9 + 7; const int maxn = 1e5 + 10; LL a[maxn]; LL pow2[maxn]; map<LL, LL> M; void init() { pow2[0] = 1; for(int i = 1; i < maxn; i++) pow2[i] = pow2[i-1] * 2 % Mod; } int main() { int T, n; scanf("%d", &T); init(); while(T--) { scanf("%d", &n); for(int i = 0; i < n; i++) scanf("%lld", &a[i]); M.clear(); LL ans = 0; for(int i = 0; i < n; i++) { LL t = M[a[i]]; LL l = (pow2[i] - t + Mod) % Mod; LL sum = l * pow2[n-i-1] % Mod * a[i] % Mod; ans = (ans + sum) % Mod; M[a[i]] = (t + pow2[i]) % Mod; } printf("%I64d\n", ans); } return 0; }
相关文章推荐
- iOS编程-------UIScrollView / UIPageControl
- setuid,setgid,sticky
- UI常用控件
- iOS编程--------UIControl的作用及其子类UISegmentedControl的使用 / UISlider的使用 / UIImageView的使用
- Gson解析(2)——Gson注解和GsonBuilder
- 二分+树上乱搞 zoj3820 Building Fire Stations
- 第三次复习课--UI(完)
- UIPushBehavior :推动效果 ,UISnapBehavior:迅速移动效果,UIAttachmentBehavior:附着效果
- [AndroidUI]使用DrawerLayout实现侧滑菜单
- UITableView的使用
- HDU 5496 Beauty of Sequence
- iOS的UDID废用以及UUID配合keychain的替换方案实现
- 使用Xcode 时候程序莫名其妙Build不过去的可能原因
- Android UI SurfaceView的使用-绘制组合图型,并使其移动
- Android UI SurfaceView的使用-绘制组合图型,并使其移动
- 改变UITableView的headerView、footerView背景颜色
- Android UI SurfaceView的使用-绘制单个图型或多个图形
- UITextField
- Android UI SurfaceView的使用-绘制单个图型或多个图形
- require的定义看不懂【2】