题目大意:n个数,每个数的大小都在1~n之间。操作n次,第 i 次将第 i 个数放到一个双端队列里面,放到队列两端的概率是相等的。问操作n次之后双端队列中元素满足xi>xi+1的对数的期望,输出的数据为:(期望*2^n)%mod。

题目分析:定义状态dp(i)表示操作 i 次之后的相应期望值。则状态转移方程为:

dp(i)=1/2*(dp(i-1)+k1)+1/2*(dp(i-1)+k2)  (两种情况,放在队首和队尾) 其中,k1表示比a(i)小的元素可能与a(i)相邻的总次数,k2表示比a(i)大的元素可能与a(i)相邻的总次数。

合并一下得到:dp(i)=dp(i-1)+(k1+k2)/2 ,因为输出的数据为 “(期望*2^n)%mod”,所以,改变dp(i)的含义为如果操作 i 次要输出的结果,则:

dp(i)=2*dp(i-1)+k1+k2=2*dp(i-1)+k(i-1)-num(a(i)),其中,k(i-1)表示前i-1个数与第 i 个数相邻的可能总次数,num(a(i))表示到目前为止与a(i)相等的元素可能与a(i)相邻的总次数。

有个规律能够快速的求出k(i)和num(a(i))。假如当前在进行第 i 次操作,那么第1、第2、第3...元素可能与a(i)相邻的次数为1、1、2、4、8...

只需将上述规律要出表f,就能快速查找k(i)和num(a(i))以及更新num(a(i))。

代码如下:

# include<iostream>
# include<cstdio>
# include<cstring>
# include<vector>
# include<queue>
# include<list>
# include<set>
# include<map>
# include<string>
# include<cmath>
# include<cstdlib>
# include<algorithm>
using namespace std;
# define LL long long const int N=1005;
const int INF=1000000000;
const LL oo=0x7fffffffffffffff;
const double eps=1e-10;
const int mod=1000000007; int n;
LL sum[N*100];
LL f[N*100];
LL dp[N*100];
LL num[N*100]; void init()
{
f[0]=f[1]=1;
for(int i=2;i<=100000;++i)
f[i]=(2*f[i-1])%mod;
sum[0]=1;
for(int i=1;i<=100000;++i)
sum[i]=(f[i]+sum[i-1])%mod;
} int main()
{
init();
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
memset(num,0,sizeof(num));
memset(dp,0,sizeof(dp));
LL a;
scanf("%lld",&a);
dp[1]=0;
num[a]=f[0]%mod;
for(int i=2;i<=n;++i){
scanf("%lld",&a);
dp[i]=(2*dp[i-1]+sum[i-2]-num[a]+mod)%mod;
num[a]=(num[a]+f[i-1])%mod;
}
printf("%lld\n",(dp[n]*2)%mod);
}
return 0;
}

  

ZOJ-3929 Deque and Balls (DP+找规律)的更多相关文章

  1. 期望+DP ZOJ 3929 Deque and Balls

    题目链接 题意:给你n个数,按照顺序依次放入一个双端队列(可放在头部,也可以放在尾部),求xi > xi+1的期望 * 2^n mod (1e9 +7) 分析:期望*2^n=出现这种排法的概率* ...

  2. ZOJ 3929 Deque and Balls

    答案=所有情况中总共递减次数*2 放完i个和放完i-1个之间的递减次数是可以递推的. 有一部分是放完i-1个之后产生的,还有一部分是放完第i个之后新产生的. 注意减去多加的部分. 2的i次方可以打个表 ...

  3. [FJOI2007]轮状病毒 题解(dp(找规律)+高精度)

    [FJOI2007]轮状病毒 题解(dp(找规律)+高精度) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1335733 没什么好说的,直接把规律找出来,有 ...

  4. ZOJ 3622 Magic Number 打表找规律

    A - Magic Number Time Limit:2000MS     Memory Limit:32768KB     64bit IO Format:%lld & %llu Subm ...

  5. HDU 1028 Ignatius and the Princess III (母函数或者dp,找规律,)

    Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  6. hdu 2604 Queuing dp找规律 然后矩阵快速幂。坑!!

    http://acm.hdu.edu.cn/showproblem.php?pid=2604 这题居然O(9 * L)的dp过不了,TLE,  更重要的是找出规律后,O(n)递推也过不了,TLE,一定 ...

  7. ZOJ 3932 Deque and Balls

    There are n balls, where the i-th ball is labeled as pi. You are going to put n balls into a deque. ...

  8. loj6172 Samjia和大树(树形DP+找规律)

    题目: https://loj.ac/problem/6172 分析: 首先容易得出这样的dp式子 然后发现后面那个Σ其实是两段区间,可以用总和减去中间一段区间表示,所以只要维护个前缀和就ok了 这样 ...

  9. LightOJ 1323 Billiard Balls(找规律(蚂蚁爬木棍))

    题目链接:https://vjudge.net/contest/28079#problem/M 题目大意: 一个边界长为L宽为W的平面同时发射n个台球,运动K秒,台球碰到桌面及两(多)个台球相撞情况如 ...

随机推荐

  1. The Coco-Cola Store C(Contest #3 )

    Once upon a time, there is a special coco-cola store. If you return three empty bottles to the shop, ...

  2. SharePoint 2013 开发——开发并部署webpart

    博客地址:http://blog.csdn.net/FoxDave webpart我们就不详细阐述了,在APP的开发中,自定义属性设置通过APP webpart的URL查询字符串传递,它通过IFR ...

  3. poj3667 线段树 区间合并

    //Accepted 3728 KB 1079 ms //线段树 区间合并 #include <cstdio> #include <cstring> #include < ...

  4. (转)Eclipse “cannot be resolved to a type” error

    原:http://www.cnblogs.com/xuxm2007/archive/2011/10/20/2219104.html Eclipse “cannot be resolved to a t ...

  5. 官方文档学习之《start developing iOS apps(swift)》

    1.  let 关键字是用来定义常量的,任何类型的常量都可以进行定义:例如:定义字符串 let constantValue1 = "this is a string",也可以定义数 ...

  6. svnUbuntu下安装与使用(ZT)

    1.安装包 1.$ sudo apt-get install subversion 2.创建项目目录 $ sudo mkdir /home/xiaozhe/svn $ cd /home/xiaozhe ...

  7. Java 集合深入理解(6):AbstractList

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天心情比天蓝,来学学 AbstractList 吧! 什么是 AbstractList AbstractList 继承自 ...

  8. magento在产品详细页面添加分享链接的方法

    1,在产品详细页面的对用位置加入一下代码 <div class="sharethis_box">          <?php echo $this->ge ...

  9. 第一个Sprint冲刺第三天

    讨论成员:邵家文.李新.朱浩龙.陈俊金 讨论问题:如何将新学的技术应用于四则运算项目中 讨论地点:宿舍 进展:跟预期相差不远

  10. NSFileHandle 、 沙箱机制 、 属性列表

    1 使用NSFilehandle进行数据读写 1.1 问题 NSFileManager用于实现对文件的操作,而NSFileHandle是IOS提供的对文件内容(二进制数据)进行操作的类,例如数据的读写 ...