codeforces960G. Bandit Blues】的更多相关文章

题目链接:codeforces960G 来看看三倍经验:hdu4372 luogu4609 某蒟蒻的关于第一类斯特林数的一点理解QAQ:https://www.cnblogs.com/zhou2003/p/10780832.html 注意到当前序列的最大值会对前缀最大值和后缀最大值均产生\(1\)的贡献 那么当我们去掉这个最大值后,剩下\(n-1\)个元素,需要产生\(a-1\)个前缀最大值和\(b-1\)个后缀最大值,并且它们的位置会以最大值为界限分布在两侧 我们将剩下的\(n-1\)个元素分…
题目大意: 求满足比之前的任何数小的有A个,比之后的任何数小的有B个的长度为n的排列个数. 题目分析: 首先写出递推式,设s(n,k)表示长度为n的排列,比之前的数小的数有k个. 我们假设新加入的数为1,那么s(n,k)=s(n-1,k-1)+(n-1)*s(n,k). 这个式子是第一类斯特林数的递推式. 用h(n,a,b)表示满足题目给出条件的排列个数. 得出h(n,a,b)=Σs(k,a-1)*s(n-k-1,b-1)*C(n-1,k).直观的理解就是将原排列从最高点分成两部分,两部分分别组…
[CF960G]Bandit Blues(第一类斯特林数,FFT) 题面 洛谷 CF 求前缀最大值有\(a\)个,后缀最大值有\(b\)个的长度为\(n\)的排列个数. 题解 完完全全就是[FJOI]建筑师的加强版本. 显然每一个前缀最大值和一段连续的区间构成了一个环排列,显然每个前缀最大值就是这个环中的最大值.而全局最大值一定把前后缀最大值分开. 所以答案考虑除最大值外,左侧需要\(a-1\)个前缀最大值,右侧需要\(b-1\)个前缀最大值.也就是一共要\(a+b-2\)个环,那么这一部分的贡…
[CF960G]Bandit Blues 题面 洛谷 题解 思路和这道题一模一样,这里仅仅阐述优化的方法. 看看答案是什么: \[ Ans=C(a+b-2,a-1)\centerdot s(n-1,a+b-2) \] 组合数我们已经可以\(O(N)\)求了,主要是第一类斯特林数存在问题. 考虑它的转移: \[ s(n,m)=s(n-1,m-1)+(n-1)*s(n-1,m) \] 根据这个转移,我们写出它\(n\)固定时的生成函数 \[ G(x)=\prod_{i=0}^{n-1}(x+i) \…
考虑转化题意,我们发现其实就是找一个长度为\(n\)的全排列,使得这个排列有\(A\)个前缀最大值,\(B\)个后缀最大值,求方案数 我们考虑把最大值拎出来单独考虑,同时定义一些数的顺序排列为单调块(随便取的名字) 考虑在这个最大值左边有\(A-1\)个单调块,右边有\(B-1\)个单调块,如果这些块在左右两边按序排好的话就是一种合法方案 那我们只需要找出\(A+B-2\)个单调块,并且将其中拿出\(A-1\)个放在左边,因此答案有一项就是\(C_{A+B-2}^{A-1}\) 考虑怎么从除了最…
题意 给你三个正整数 \(n,a,b\),定义 \(A\) 为一个排列中是前缀最大值的数的个数,定义 \(B\) 为一个排列中是后缀最大值的数的个数,求长度为 \(n\) 的排列中满足 \(A = a\) 且 \(B = b\) 的排列个数.\(n \le 10^5\),答案对 \(998244353\) 取模. Sol 首先可以设一个 \(DP\) 状态 \(f(i,j)\) 表示,长度为 \(i\) 的排列,有 \(j\) 个前缀最大值的方案数. 那么转移就是枚举新放一个最小值,只有放在序列…
传送门 弱化版:FJOI2016 建筑师 由上面一题得到我们需要求的是\(\begin{bmatrix} N - 1 \\ A + B - 2 \end{bmatrix} \times \binom {A+B-2} {A - 1}\) 注意到这题的复杂度瓶颈是求第一类斯特林数,因为求组合数可以\(O(N)\),但是暂时我们求第一类斯特林数只有\(O(N^2)\)的方法 考虑第一类斯特林数的转移式子:\(\begin{bmatrix} a \\ b \end{bmatrix} = \begin{b…
题面1 题面2 两个题推导是一样的,具体实现不一样,所以写一起了,以FJOI 2016 建筑师 的题面为标准 前后在组合意义下一样,现在只考虑前面,可以发现看到的这a个建筑将这一段划分成了a-1个区间,区间里的数随意填. 看起来可以用组合数算,但是还要考虑看到的建筑,所以我们把每个建筑和它后面这段区间合起来看.设区间的长度是len,这就是一个len+1个数的圆排列(等于len!,相当于固定一个开头后面随便排) 这样考虑前后就是将n-1个数划分为a+b-2个全排列,n-1是因为最高的那个在两边都没…
Description 你需要构造一个长度为 \(n\) 的排列 , 使得一个数作为前缀最大值的次数为 \(A\) , 作为后缀最大值的次数为 \(B\) , 求满足要求的排列个数 . 题面 Solution 同 \(FJOI\) 建筑师 . 从 \(n\) 到 \(1\) 依次加入 , 对于 \(n\) ,对 \(A,B\) 的出现次数都会贡献 \(1\) . 剩下的数 , 如果放在左边则对 \(A\) 有贡献 , 放在右边则对 \(B\) 有贡献 , 放在中间则没有贡献 . 我们从组合意义上…
题目链接 CF960G 题解 同FJOI2016只不过数据范围变大了 考虑如何预处理第一类斯特林数 性质 \[x^{\overline{n}} = \sum\limits_{i = 0}^{n}\begin{bmatrix} n \\ i \end{bmatrix}x^{i}\] 分治\(NTT\)即可在\(O(nlog^2n)\)的时间内预处理出同一个\(n\)的所有\(\begin{bmatrix} n \\ i \end{bmatrix}\) 其实还有比较优美的倍增\(fft\)的\(O(…
$ \color{#0066ff}{ 题目描述 }$ 给你三个正整数 \(n\),\(a\),\(b\),定义 \(A\) 为一个排列中是前缀最大值的数的个数,定义 \(B\) 为一个排列中是后缀最大值的数的个数,求长度为 \(n\) 的排列中满足 \(A = a\) 且 \(B = b\) 的排列个数.\(n \le 10^5\),答案对 \(998244353\) 取模. \(\color{#0066ff}{输入格式}\) 三个整数n,a,b \(\color{#0066ff}{输出格式}\…
传送门 可以去看看litble巨巨关于第一类斯特林数的总结 设\(f(i,j)\)为\(i\)个数的排列中有\(j\)个数是前缀最大数的方案数,枚举最小的数的位置,则有递推式\(f(i,j)=f(i-1,j-1)+(i-1)\times f(i-1,j)\) 这个就是第一类斯特林数 第一类斯特林数中\(S_1(n,m)\)是\(\prod_{i=0}^{n-1}(x+i)\)中\(x^m\)的系数,可以用分治\(FFT\)做到\(O(n\log^2n)\)的复杂度 首先\(n\)肯定是前缀最大值…
传送门 题意: 现在有一个人分别从\(1,n\)两点出发,包中有一个物品价值一开始为\(0\),每遇到一个价值比包中物品高的就交换两个物品. 现在已知这个人从左边出发交换了\(a\)次,从右边出发交换了\(b\)次. 现在问有多少个排列满足这一条件. 思路: 倒过来考虑的话,显然全局最大值为最后一次交换. 然后左边我们会放置\(a-1\)个递增的物品,右边放\(b-1\)个递减的物品,其余的物品我们在中间部分任意放置即可,但要保证价值在一定范围. 将问题进一步抽象,我们即要将\(n-1\)个数划…
Solution: ​ 先考虑前缀,设 \(f(i, j)\) 为长度为 \(i\) 的排列中满足前缀最大值为自己的数有 \(j\) 个的排列数. 假设新加一个数 \(i+1\) 那么会有: \[ f(i,j)\rightarrow f(i + 1, j + 1)\\ f(i, j)\times i\rightarrow f(i + 1, j) \] ​ 即将 \(i+1\) 放在那哪个位置,会对后面产生贡献,综合一下,\(f(i, j)\) 就是第一类斯特林数 \(i \brack j\) .…
题目传送门 https://codeforces.com/contest/960/problem/G 题解 首先整个排列的最大值一定是 \(A\) 个前缀最大值的最后一个,也是 \(B\) 个后缀最大值的最后一个. 那么枚举一下最大值的位置为 \(i\),那么左右两边各选一些数的方案数为 \(\binom {n-1}{i-1}\). 然后,左边有 \(i-1\) 个数,要分成 \(A-1\) 个部分,每一个部分的第一个数是所有数中最大的,并且每一个部分之间的最大值要递增. 可以发现这个问题等价于…
题意:求满足条件的排列,1:从左往右会遇到a个比当前数大的数,(每次遇到更大的数会更换当前数)2.从右往左会遇到b个比当前数大的数. 题解:1-n的排列,n肯定是从左往右和从右往左的最后一个数. 考虑\(S(n,m)\)是1-n排列中从左往右会遇到m个比当前数大的数,考虑把1放在最左边,即\(S(n-1,m-1)\),考虑1不在最左边,有n-1个位置,1不可能会更换\((n-1)*S(n,m)\).即\(S(n,m)=S(n-1,m-1)+(n-1)*S(n-1,m)\) \(S(n,m)\)即…
题目描述 LOJ题面:https://loj.ac/problem/2173. 洛谷题面:https://www.luogu.org/problemnew/show/P4609. Solution [CF960G] Bandit Blues这题的弱化版,直接暴力算斯特林数就好了. 不知道为什么这是省选题但是\(bzoj\)没有... 注意模数是\(1e9+7\)...我以为和原题一样被坑了好久. #include<bits/stdc++.h> using namespace std; void…
基本定义 第一类斯特林数:$1 \dots n$的排列中恰好有$k$个环的个数:或是,$n$元置换可分解为$k$个独立的轮换的个数.记作 $$ \begin{bmatrix} n \\ k \end{bmatrix}. $$ 第二类斯特林数:将$n$个元素分成$k$个非空集合的方案数.记作 $$ \begin{Bmatrix} n \\ k \end{Bmatrix}. $$ 根据定义,我们有 $$ \sum_{k=0}^n \begin{bmatrix} n \\ k \end{bmatrix…
传送门 没想到连黑题都会有双倍经验的 其实这题本质上是和CF960G Bandit Blues一样的,不过那里是要用分治FFT预处理第一类斯特林数,这里直接打表预处理第一类斯特林数就可以了 //minamoto #include<bits/stdc++.h> #define R register #define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i) #define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)…
第一类斯特林数 定义 第一类Stirling数\(s(n,m)\),也可记为\(\begin{bmatrix}n\\m\end{bmatrix}\). 第一类Stirling分为无符号第一类Stirling数\(s_u(n,m)\)和带符号第一类Stirling数\(s_s(n,m)\). 他们分别表现为其升阶函数和降阶函数的各项系数,形式如下: \[ x^{n\downarrow}=x\cdot (x-1)\cdot (x-2)\cdots (x-n+1)=\sum_{k=0}^ns_s(n,…
因为垃圾电脑太卡了就重开了一个... 前传:多项式Ⅰ u1s1 我预感还会有Ⅲ 多项式基础操作: 例题: 26. CF438E The Child and Binary Tree 感觉这题作为第一题还蛮合适的( 首先我们设 \(f_i\) 为权值之和为 \(i\) 的符合要求的二叉树的个数. 显然可以枚举根节点的权值.左子树的权值之和进行转移. 也就是 \(f_i=\sum\limits_{x\in S}\sum\limits_{y=0}^{i-S}f_yf_{i-x-y}\) 如果我们记 \(…
选自<Reinforcement Learning: An Introduction>, version 2, 2016, Chapter2 https://webdocs.cs.ualberta.ca/~sutton/book/bookdraft2016sep.pdf 引言中是这样引出Chapter2的: One of the challenges that arise in reinforcement learning, and not in other kinds of learning…
Bandit Level 24 → Level 25 Level Goal A daemon is listening on port 30002 and will give you the password for bandit25 if given the password for bandit24 and a secret numeric 4-digit pincode. There is no way to retrieve the pincode except by going thr…
Bandit Level 18 → Level 19 Level Goal The password for the next level is stored in a file readme in the homedirectory. Unfortunately, someone has modified .bashrc to log you out when you log in with SSH. Commands you may need to solve this level ssh,…
简介: Bandit是一款Python源码分析框架,可用于Python代码的安全性分析.Bandit使用标准库中的ast模块,将Python源码解析成Python语法节点构成的树.Bandit允许用户编写自定义的测试.测试完成后,Bandit会生成针对源码的安全报告. 官网: https://wiki.openstack.org/wiki/Security/Projects/Bandit 安装: pip3 install bandit 使用命令: bandit -r 目标路径 -f txt -o…
[原文链接] 选择是一个技术活 著名鸡汤学家沃.滋基硕德曾说过:选择比努力重要. 我们会遇到很多选择的场景.上哪个大学,学什么专业,去哪家公司,中午吃什么,等等.这些事情,都让选择困难症的我们头很大.那么,有办法能够应对这些问题吗? 答案是:有!而且是科学的办法,而不是“走近科学”的办法.那就是bandit算法! bandit算法来源于人民群众喜闻乐见的赌博学,它要解决的问题是这样的[1]: 一个赌徒,要去摇laohu机,走进赌场一看,一排laohu机,外表一模一样,但是每个laohu机吐钱的概…
Welcome to Monday morning at the office. Did you have trouble sleeping last night? Was your stomach bothering you? Did you feel a sense of dread about heading into work? dread:恐惧,担心 Could be that you have a case of the Sunday blues - and you're not t…
本篇的主题是对Upper Conference Bound(UCB)策略进行一个理论上的解释补充,主要探讨UCB方法的由来与相关公式的推导. UCB是一种动作选择策略,主要用来解决epsilon-greedy在选择时的低效率问题.对于解释UCB的使用机理上,我认为下面这篇文章写的还不错,深入浅出,只不过在公式推导上有一点点问题: Multi-Armed Bandit: UCB (Upper Bound Confidence) 我们先来说一说epsilon-greedy策略在选择动作时有什么问题.…
这是我学习Reinforcement Learning的一篇记录总结,参考了这本介绍RL比较经典的Reinforcement Learning: An Introduction (Drfit) .这本书的正文部分对理论的分析与解释做的非常详细,并且也给出了对结论详尽的解析,但是把问题的解决和实现都留到到了课后题,所以本篇文章主要侧重与对Multi-Armed Bandit问题解决算法的实现以及对实现中可能遇到的问题进行一个总结与记录.此外,如果困于书中对于理论解释的冗长,可以参考下面这两篇文章(…
假设我有5枚硬币,都是正反面不均匀的.我们玩一个游戏,每次你可以选择其中一枚硬币掷出,如果掷出正面,你将得到一百块奖励.掷硬币的次数有限(比如10000次),显然,如果要拿到最多的利益,你要做的就是尽快找出"正面概率最大"的硬币,然后就拿它赚钱了. 这个问题看起来很数学化,其实它在我们的生活中经常遇见.比如我们现在有很多在线场景,遇到一个相同的问题:一个平台这么多信息,该展示什么给用户,才能有最好的收益(比如点击率)? Google作为最大的搜索广告公司,在用户搜索时该展示什么广告:F…