HDU 5496 - BestCoder Round #58 - Beauty of Sequence
思路 :
考虑这个序列当前的第i个数能有几种组合方法, 前面有2^(i-1)种, 后面有有2^(n-i)种, 本来答案是a[i] * 2^(n-1), 但要求对于某种排列存在相邻且相等的数是不计入答案的
例如 第二组样例 1 2 1 3, 1 1 3中1重复故要减去一个1
可见, 只有前一个数和a[i]相等时, a[i]就不能计入了, 而后面和a[i]相等便可以计入(后面和a[i]相等时, 可以看作约去后面的值, 这一种方法对a[i]这个值依然有1个贡献)
所以关键就是得到第i个数, 前面有几种以a[i]结尾的方法, 设为k, 这是要减去的方法数, a[i]的贡献就是a[i] * 2^(n-i) *[2^(n-i) - k]
方法 :
2的幂次预处理到10^5
对于得到k, 可以用map + 前缀和的形式记录, 例如当前位置i, 第一次得到一个a[i], 那么以这个数结尾有2^(i-1)种方法, 第二次在j位置得到了a[j] = a[i]
那么以a[i]结尾的就变成了2^(i-1) + 2^(j-1)种
比赛的时候没想到用map记录, n^2完全不敢写, 太弱了= =
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map> using namespace std; typedef long long LL; const int MAXN = 1e5+;
const int MOD = 1e9+; map<int, LL> r;
int a[MAXN];
int f[MAXN];
int Pow[MAXN]; void Pre()
{
Pow[] = ;
for(int i = ; i < MAXN; i++) {
Pow[i] = (Pow[i-] << ) % MOD;
}
} void Init()
{
r.clear();
} int main()
{
Pre(); int t;
int n; scanf("%d", &t);
while(t--) {
Init();
scanf("%d", &n);
for(int i = ; i < n; i++) {
scanf("%d", &a[i]);
f[i] = (LL)Pow[n-i-] * (Pow[i] - r[a[i]] + MOD) % MOD;
r[a[i]] += Pow[i];
r[a[i]] %= MOD;
}
LL ans = ;
for(int i = ; i < n; i++) {
ans += (LL)a[i] * f[i];
ans %= MOD;
}
printf("%I64d\n", ans);
} return ;
}
HDU 5496 - BestCoder Round #58 - Beauty of Sequence的更多相关文章
- hdu 5667 BestCoder Round #80 矩阵快速幂
Sequence Accepts: 59 Submissions: 650 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
- hdu 5643 BestCoder Round #75
King's Game Accepts: 249 Submissions: 671 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6 ...
- hdu 5641 BestCoder Round #75
King's Phone Accepts: 310 Submissions: 2980 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- HDU 5682/BestCoder Round #83 1003 zxa and leaf 二分+树
zxa and leaf Problem Description zxa have an unrooted tree with n nodes, including (n−1) undirected ...
- HDU 5506 - BestCoder Round #60 - GT and set
题目链接 : http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=641&pid=1003 题意 : 给N集 ...
- HDU 5505 - BestCoder Round #60 - GT and numbers
题目链接 : http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=641&pid=1002 思路 : N有若 ...
- HDU 5568 - BestCoder Round #63 - sequence2
题目链接 : http://acm.hdu.edu.cn/showproblem.php?pid=5568 题意 : 给一个长度已知的序列, 给一个值k, 问该序列中有多少种长度为k的上升子序列 思路 ...
- hdu 5637 BestCoder Round #74 (div.2)
Transform Accepts: 7 Submissions: 49 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131072 ...
- hdu 5600 BestCoder Round #67 (div.2)
N bulbs Accepts: 275 Submissions: 1237 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 655 ...
随机推荐
- cocos2d-x 在mac下执行 demo
搞了好久,最终成功了. 记录一下 前辈的文章. 依照这个弄的 .http://blog.csdn.net/taowenyin/article/details/11750127 前辈的这个文章是在win ...
- [AngularJS] ngPluralize
ngPluralize is a directive that displays messages according to en-US localization rules. <script& ...
- Swift学习笔记 - 函数与闭包
import Foundation //1.函数的定义与调用//以 func 作为前缀,返回箭头 -> 表示函数的返回类型func sayHello(name: String) -> St ...
- PHP Strict standards:Declaration of … should be compatible with that of…(转)
今天把原来一份很老的PHP代码导入到了PaaS上,出现了许多Strict standards:Declaration of … should be compatible with that of…这样 ...
- C#&Sql获取中文字符拼音首字母的方法
C#获取字符拼音首字母,可以存储在数据库中以备将来按字母搜索的需求. public static string GetAc(string s) { try { string temp = Servic ...
- Linux文件和目录操作管理命令
1.pwd:显示工作目录路径 -p:显示实际物理路径 -l:显示链接路径 2.cd:更改工作目录路径 cd:进入用户主目录 cd~:进入用户主目录 cd-:返回进入此目录之前所在的目录 cd..:返回 ...
- 表被占用住,提示资源正忙的处理方式。kill掉表的操作。
1)查找死锁的进程: SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,l.ORACLE_USERNAME,l.OS_USER_NAME,l ...
- Hbase常用操作
下面我们看看HBase Shell的一些基本操作命令,我列出了几个常用的HBase Shell命令,如 名称 命令表达式 创建表 create '表名称', '列名称1','列名称2','列名称N' ...
- 使用ShareSDK完成Facebook第三方登录和Facebook分享时没办法跳转到Facebook应用
楼主是通过cocoapod接入ShareSDK, 后来发现无论是使用fb分享还是登录, 都是跳出了网页认证(即使我的手机有安装了fb) 后来mob的技术客服小哥告诉我在构造分享参数的时候, 执行参数字 ...
- 武汉科技大学ACM :1004: 华科版C语言程序设计教程(第二版)课后习题3.7
Problem Description 输入无符号短整数k[hex.]和p[oct.],将k的高字节作为结果的低字节,p的高字节作为结果的高字节组成一个新的整数. Input k[hex.]和p[oc ...