码迷,mamicode.com
首页 > 其他好文 > 详细

杂题口胡

时间:2020-04-07 22:19:05      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:经典   情况   概率   $1   problem   长度   sum   序列   microsoft   

$Bitwise\ Xor$:给定一个长度为$n$的整数序列$a$和一个整数$k$,求$a$有多少子序列,两两异或值大于等于$k$。$n \leq 3e5,k<2^{60}$

题解:发现两两异或值的最小值一定是排序后相邻的两个数,首先把$a$排序,设f[i]表示以i结尾的序列个数。用$trie$树优化$dp$,$trie$上每个节点维护子树$f$值的和,根据当前位要大于$x$应该是$0$还是$1$向下递归。$f[i]=query(a[i],x)+1$。加上他自己单独成串。$O(nlogk)$

 

$MOD\ Problem$:T组询问,给定$n$,求$\sum \limits_{i=1}^{n} n\ mod\ i$。$T\leq 1e6,1\leq n\leq 1e7$

题解:$\sum \limits_{i=1}^{n} n\ mod\ i=\sum \limits_{i=1}^{n}n-\left \lfloor \frac{n}{i} \right \rfloor*i=n^2-\sum \limits_{i=1}^{n}\left \lfloor \frac{n}{i} \right \rfloor*i$。有$\sum \limits_{i=1}^{n}\left \lfloor \frac{n}{i} \right \rfloor*i=\sum \limits_{i=1}^{n}=d(i)\ \ \ \ d(i)$表示$i$的约数和。线筛在求前缀和即可。$O(T+n)$

 

平方串:定义平方串当且仅当这个串非空且它可以有两个相同的串连在一起而成。先有一个长度为$n$的串$s$,随机取出一个非空子串,若这个子串没有前导$0$且为平方串,贡献为串的数值,否则贡献为$0$,求取出的子串的贡献的期望。$1 \leq s[i] \leq 9$,$n \leq 5e5$。

题解:有一个经典的套路:插点法。具体就是枚举平方串的长度$2*len$,然后把原串每$len$个插一个关键点,则平方串最多会跨越两个关键点。枚举两个关键点的三段字符串,求前两个串的最长公共后缀,后两个串的最长公共前缀,发现平方串的左端点可以在一个$[l,r]$区间里滑动(建议画图理解)。预处理出$f[i]=f[i-1]*10+s[i]$,那么$[i,j]$构成的数就是$f[j]-f[i-1]*10^{j-i+1}$,处理一个前缀和。那么可以很容易得到平方串的前一半的贡献$sum$,那么最终贡献为$sum*10^{len}+sum$。前导$0$的情况:在处理f的时候如果$s[i+1]==0$,那么$f[i]=0$。因为处理的是平方串的前一半,那么$i+1$就等于这个串的开头,直接把f值设为$0$就不会考虑到了。复杂度调和级数$O(nlnn)$

 

先整几个高考数学的概率公式:

$P(A|B)$表示在$B$发生的条件下发生$A$的概率,$P(AB)$表示$A$和$B$同时发生的概率。

全概率公式:假设$B_1,B_2...B_k$是基本事件的一个分割,则$P(A)=\sum \limits_{i=1}{k}P(A|B_i)*P(B_i)$

条件概率:$P(A|B)=\frac{P(AB)}{P(B)}$

贝叶斯公式:$P(A|B)=\frac{P(AB)}{P(B)}=\frac{P(B|A)P(A)}{P(B)}$

 

$Conjugate$:有$n$堆石子,第$i$堆石子有$a_i$个,每次等概率随机选择一个石子把其所在的那一堆全部丢掉,求期望多少次后第$1$堆石子被丢掉。$n \leq 1e6,a_i \leq 1e9$

题解:期望的线性性。考虑第$i$堆石子$(i>1)$在第一堆石子被丢掉前被丢掉的概率为$\frac{a[i]}{a[i]+a[1]}$,对答案的次数贡献为$1$,所以$ans=\sum \limits_{i=2}^{n} \frac{a[i]}{a[i]+a[1]}\ \ +1$。加一是丢$a_1$的那一次。$O(n)$

 

湖人:数$1~n$,每次随机选择一个还未被删去的数$x$,把包括自己在内的所有倍数删去,求期望多少次之后所有数都被删掉。$1 \leq n \leq 1e9$

题解:同上,考虑期望的线性性。对于数$x$,被自己删掉的概率为$\frac{1}{d(x)}$。每删一次对答案贡献$1$,所以$ans=\sum \limits_{i=1}^{n}\frac{1}{d(i)}$。$n$很大,用个$min25$筛(我还不会好可怕)。

 

$Game\ with\ Marbles$:袋子里有$R$个红球,$G$个绿球和$B$个蓝球。每回合随机等概率从袋子中取出一个球。如果是红球,就扔掉;如果是绿球或蓝球,就放进袋子里。已知当前刚好拿出了第$K$个蓝球,求期望经过的回合数。$1\leq R,G,B,K \leq 1e9$

题解:(充分认识到自己在概率上有多白痴,不是很明白,超级感性,可能有错)瞎写:期望回合数$=$期望拿过的球个数$=$红球个数期望$+$蓝球个数期望$+$绿球个数期望。期望的线性性可以分别求在求和。拿出了$K$个蓝球,所以期望拿出$K$个蓝球。考虑每摸到一个蓝球前摸到了期望摸到几个绿球,这时候可以不考虑红球,(红的拿就拿了没影响),所以列出方程$E= \frac{G}{B+G}*(E+1)$,解得$E=\frac{G}{B}$。所以一共期望摸了$\frac{KG}{B}$个绿球。考虑对于每个红球摸出他的概率,发现不太好算,所以反过来,求每个球没被摸到的概率:同样也是可以只考虑所有的蓝球和这一个红球,红球一直没被拿,所以这$K$次都是拿的蓝球。一次拿到蓝球的概率为$\frac{B}{B+1}$,$K$次后这个红球都没被摸到的概率为$(\frac{B}{B+1})^K$。所以一个红球被摸到的概率就是$1-(\frac{B}{B+1})^K$。每个红球都是独立的,所以摸到的红球的期望是$(1-(\frac{B}{B+1})^K)*R$。(理解不深,可能是错的...)

 

$UOJ$#$299$游戏:$N$局游戏,给定首局两个人分别获胜的概率,当第$i − 1$局小$R$获胜时,第i局小$R$获胜的概率为$P_i$;当第$i-1$局小$B$获胜时,第$i$局小$B$获胜的概率为$Q_i$。$M$次动态插入或删除一些已知的比赛结果,求小$R$获胜总局数的期望。$1 \leq N,M \leq 2e5$

题解:期望线性性$+$贝叶斯公式。每局游戏一定只与两边已确定的结果有关。这样就划分出来了若干个区间,$M$次修改相当于把两个区间合并或把一个区间分成两个区间。假设当前$X$的两边已确定的事件是$A,B$。根据条件概率,有$P(X|(A \bigcap B))=\frac{P(X \bigcap A \bigcap B)}{P(A \bigcap B)}=\frac{P((X \bigcap B)|A)P(A)}{P(B|A)*P(A)}=\frac{P((X \bigcap B)|A)}{P(B|A)}$。然后用线段树维护矩阵乘维护分子分母。

 

$AGC035D$:长度为n的序列$a$,每次可以选择其中连续三项,依次为$a,b,c$,将其替换为$a+b$,$b+c$两项。求最终剩下的两个数的和的最小值。$2\leq n\leq 1e9$
题解:首先题目里的操作还可以看做是选择一个数,把他的权值加到左右两项上,并把他删去。发现最后答案是每个数算了若干次。倒着考虑这个过程,发现$1,n$位置上的数一定只算了$1$次,倒数第二个删掉的数算了两次...所以每个数计算的次数为左边第一个在他之后删除的次数$+$右边第一个在他之后删除的次数。考虑记忆化搜索。$solve(l,r,cntl,cntr)$表示区间$(l,r)$,$l$计算$cntl$次,$r$计算$cntr$次。$f[l][r][cntl][cntr]=\min \limits_{l<i<r}{solve(l,i,cntl,cntl+cntr)+sovle(i,r,cntl+cntr,cntr)}$。
 
$CF765F$:给定一个长度为$n$的序列,有$m$次询问,每次给定一个区间$[l, r]$,求$\min \limits_{l \leq i<j\leq r}{|A_i−A_j|}$。$n\leq 2e5,m \leq 3e5$

题解:线段树。这种题见过好几次了好像,或者原题?记不清了。 不要求强制在线,离线下来按$r$排序,用线段树动态维护当前点为右端点时的答案。绝对值不好处理,所以只考虑$j<i$且$a[j]\geq a[i]$的情况,另一种情况倒过来再来一遍就好。现在要把右端点从$a[i-1]$移到$a[i]$,考虑$a[i]$的加入带来的影响。找到$i$左边第一个大于$a[i]$的位置$pos$,更新$pos$位置的答案。对于$k<pos$,如果$a[k]\geq a[pos]$,那么$k$和$pos$之间的答案一定比$k$与$i$之间的答案优,且能取到$k$的话一定就能取到$pos$。对于$a[k]<a[pos]$,设$mid=(a[i]+a[pos])>>1$,如果$a[k]>mid$,$k$和$pos$的答案会在反向的时候计算不用管;所以就只需要考虑$a[k] \leq mid $的情况,每次区间长度会$/2$,一直处理下去就好了。复杂度$O(nlognloga_i)$

 

$operation$:好像做过?分块大法好。

 

 

 

 

杂题口胡

标签:经典   情况   概率   $1   problem   长度   sum   序列   microsoft   

原文地址:https://www.cnblogs.com/jrf123/p/12651469.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!