首页 > 其他分享 >计数练习

计数练习

时间:2023-06-20 17:33:07浏览次数:24  
标签:练习 然后 合法 计数 序列 考虑 我们 dp

计数练习

CF840C On the Bench

考虑\(xy,xz\)是完全平方数,\(yz\)同样也是

于是我们可以对此划分等价类,每个等价类里的数不能相邻

我们发现在插入一个等价类后一些不合法的也可能变合法,因此我们这里要记录一些不合法的信息

考虑\(dp_{i,j}\)表示前\(i\)个等价类中有\(j\)个不合法的对,这里先在等价类里消序

考虑插入了\(x\)个数,我先把他们放一起,然后砍\(i\le x-1\)刀

考虑枚举\(p\le min(i+1,j)\)为放入不合法对的段即可

时间复杂度是\(n(\sum a_i)^2\)

似乎有\(log\)的多项式

[CTSC2017]吉夫特

直接\(Lucas\),然后你会发现\(i+1\)是\(i\)的子集

然后呢,因为每个数的大小不一样,可以直接枚举值,枚举它的子集刷表就行了

[AGC009C]Division into Two

考虑对序列划分成若干个连续段,每个连续段都放入\(A\)或\(B\)

设\(dp_{i,0}\)为第\(i\)位放\(A\),且前面放\(B\),\(1\)同理

然后你会发现\(dp_{i,0}=\sum_{j\in[L,R]}dp_{j,1}\),这个\(L\)保证\([L,i-1]\)的\(B\)满足条件,\(R\)保证\(S_i-S_{R-1}\ge A\),都可以二分求

最后的答案可以在后面放一个极大值统计

CF1383E Strange Operation

一个非常有意思的题

可以发现我们的操作等价于在连续的\(0\)段删一个,或在连续的大小\(>1\)的\(1\)段删一个

我们考虑记录一个序列\(A\)为原串每对相邻\(1\)中\(0\)的个数,这里我们在开头和结尾都放一个\(1\)

可以发现这个\(A\)和原串一一对应

然后操作在\(A\)就体现为\(A_i-1\)或直接删除一个\(A_i=0\)的\(i\)

一个合法的由\(A\)操作出来的\(B\)满足除开头结尾,中间的序列可以在\(A\)上找到一个子序列使\(A_{p_i}\)都大于\(B_i\)

然后如果要对\(B\)记数,不难想到\(A,B\)匹配,对\(A\)\(dp\)但\(A,B\)可以匹配的位置有很多

这里我们贪心地让\(B\)找最前面\(A_x>B_i\)的\(x\),这样如果\(B\)是合法的一定是找得到的,并且唯一

直接\(dp_i\)表示\(B\)匹配了\(A_i\),填了\(y\),不难想到\(j\Rightarrow i\)只需满足\(x\in[j+1,i]\)没有\(A_x>y\)的

这里对\(y\)直接维护最大的\(j\)即可

[AGC043B] 123 Triangle

降职了

手玩一下就会发现这个\(3\)是不会作为答案的

如果第一次差分后出现\(1\),那最后的答案只能是\(1/0\),因为\(0,2\)碰到\(1\)都会变成\(1\),最后的答案一定会消去\(2\)

我们直接对序列\(\bmod 2\),然后减法变加法

观察到\(f_{i,j}=f_{i-1,j}+f_{i-1,j+1}\)

这个很想杨辉三角的形式,事实是这个的系数是\(\binom{i-1}{n-1}\)

然后直接用\(Lucas\)算就好了

如果没有\(1\),直接\(/2\)即可

[HNOI2011] 卡农

这个偶数的条件并不是很好处理如果是抽象为二进制串复杂度起飞

这里提出一个大胆的\(dp\)设计

设\(dp_i\)为前\(i\)个位置满足条件的方案,这里我们钦定每个串之间是有顺序的

因为知道了前\(i-1\)个那第\(i\)个也是可以直接推出来的,这里我们先不考虑不合法的方案,总方案为\(A_{2^n-1}^{i-1}\)

考虑不能为空等价于前\(i-1\)不能满足条件,即要减去\(dp_{i-1}\)

再考虑第\(i\)个不能和前面的一个\(j\)相同,那就等价与\(i-2\)就满足条件

也就是\(dp_{i-2}(i-1)(2^n-1-(i-2))\),可以发现这样前\(i-1\)一定是不合法的,因此和上面的没有算重

然后最后就完了,甚至不须考虑偶数位的限制

[AGC043D] Merge Triplets

成小丑了

首先不难看出这个题我们最后得出的序列是大致单调递增的,只有大概\(3\)个跟在单调子序列其其中的\(i\)后面

然后\(dp\),委了,因为每个数后面跟\(2\)个数的块要小于等于\(1\)的块数

如果把这个也设计进状态就好像会超时

然后\(nb\)的地方来了

设\(dp_{i,j}\)为前\(i\)个位置\(2\)的块数减\(1\)的块数为\(j\)且只考虑\(i\)以内的数

枚举最后一个的大小为\(1,2,3\)

然后你会发现大小为\(2\)时我们直接调整\(i-1\)里的数,放一个在\(i\),\(i-1\)放\(i\)即可,因为\(i\)一定时最大的

\(3\)的也同理

[AGC052C] Nondivisible Prefix Sums

这个如果没有重排的条件,不难发现这里我们可以直接\(dp\)

但这里的重排就把每个序列特殊化了

首先我们的序列全部乘上\(x\)肯定是不会影响它的好坏的

这里先剔除\(Sum\bmod P\equiv0\)的

考虑找出\(x\)是众数,考虑对整个序列乘一个\(x^{-1}\),这里就只剩下\(1\)最多

结论:\(1\)的个数小于等于\(\sum\limits_{i=1}^{k}(P-B_i)+P-1\),\(B\)是所有非\(1\)数组成的序列是原题的充要条件

必要性不难证

对于充分性,我们考虑这样重排序列

取出当前序列的众数\(x\)

如果\(Sum+x\bmod P\equiv 0\),就找另一个数\(y\)来填,否则就用\(x\)填

唯一冲突的时候就是只有\(x\)的时候且\(x\ge2\)

我们可以发现如果众数变了,那么一定不会出现上述情况,因为相当于交替取数

所以对于众数一直是\(1\)的情况,可以发现我们只需要在用\(B_i\)后面填一下即可,最前面填\(P-1\)个

然后我们计数的话就考虑先选那些\(Sum\not\equiv(0)(\bmod P)\)的,再考虑剔除不合法的

然后我们设\(dp_{i,j}\)为选了\(i\)个非\(1\)的数,和为\(j\),转移就是背包

然后我们直接枚举每个\(i,j\),不合法的就是\(n-i>j+P-1\),注意\(n-i-j\not\equiv0(\bmod P)\)

[ABC214G] Three Permutations

被\(yjx\)教育了/kk

考虑只有一个序列\(P\),很明显就是错排

如果有两个序列,我们同样可以枚举冲突的数量容斥,问题在于冲突的位置可以是与\(P_i\)也可以是与\(Q_i\)

如果我们考虑\(P_i,Q_i\)连边,把冲突看作一条边,那我们就可以给边定向

进一步,这个\(P_i\),\(Q_i\)连边连出来的就是若干个环,我们可以在环上跑\(dp\)

这个\(dp\)模型很经典,\(dp_{i,j,0/1,0/1}\)为前\(i\)个选\(j\)条冲突边,\(i\)是否往前指,\(1\)是否往后指

这个跑出来的东西我们可以用背包容斥

标签:练习,然后,合法,计数,序列,考虑,我们,dp
From: https://www.cnblogs.com/kid-magic/p/17494254.html

相关文章

  • 路径计数 6.20西安集训(最短哈密顿回路条数)
     因为是哈密顿回路,所以每个点度数为2假设我们已经考虑了i个点,其中b个B,w个W。若存在x条由{1,2,...n}连向{i+1,...2n},那么{1...n}内部的连边数为(2*i-x)/2而只有不同颜色的点会连边,故(2*i-x)/2<=2*min(w,b)x>=2(w+b)-4min(w,b)=2|w-b|则x>=2max(1,|w-b|).为了求得最短路,我们肯定......
  • MySQL单表查询练习(条件_模糊_分组_聚合_排序)
    练习所用数据表•部门表CREATETABLEDEPT(DEPTNOINTPRIMARYKEY,–部门编号DNAMEVARCHAR(14),–部门名称LOCVARCHAR(13)–部门地址);INSERTINTODEPTVALUES(10,‘ACCOUNTING’,‘NEWYORK’);INSERTINTODEPTVALUES(20,‘RESEARCH’,‘DALLAS’);......
  • Mysql - 统计数据
    QA统计数据是做什么的?为了解释器在计算代价时,选择最优的方案.这个值如果与实际值差距过大,会导致执行顺序的变更.统计数据有哪些?对表的统计数据-mysql.innodb_table_stats对表索引的统计数据-mysql.innodb_index_stats统计数据存在哪?有两种方式,一种存在磁盘,一种存在......
  • SystemVeriog枚举练习+书籍印刷错误记录
           睡前读书,《SystemVerilog验证测试平台编写指南(原书第三版)》,2023年3月第一版,第一次印刷。       [例2.60],代码中COLOR_e在c2赋值时,改成了小写。修正后,加上module声明的代码如下:1moduleTest;2typedefenum{RED,BLUE,GREEN}COLOR_e;3......
  • MYSQL经典练习题
    题目来源:https://blog.csdn.net/flycat296/article/details/63681089Github地址:https://github.com/bladeXue/sql50添加测试数据库信息#创建数据库createdatabasesql50;usesql50;#学生表createtableStudent(SIdvarchar(10),Snamevarchar(10),Sagedatetime,Sse......
  • 修复windows系统,统计网络上下行计数异常问题
    在监控网络上下行的时候,无法调用到上下行接口,打开性能计数器提示 解决方案: 之后重启,即可解决......
  • PHP反序列化构造POP链小练习
    一个师傅给的源码,来源不知,就当作小练习记录一下<?phperror_reporting(0);classVox{protected$headset;public$sound;publicfunctionfun($pulse){include($pulse);}publicfunction__invoke(){$this->fun($this->headset);......
  • C++练习题
    多态判断Q1:虚函数可以是内联的?A1:错误。内联是编译时刻决定的,虚函数是运行时刻动态决定的,所以虚函数不能是内联函数。虚函数前加上inline不会报错,但是会被忽略。Q2:一个类内部,可以同时声明staticvoidfun()和virutalvoidfun()两个函数?A2:错误。虽然静态函数......
  • 算法练习-day10
    栈和队列20.有效的括号题意:给定一个只包括'(',')','{','}','[',']' 的字符串s,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同类型的左括号示例:    思路:本题我有两种思路,1.双栈存储:我们可......
  • MFC练习2:使用Picture Control控件显示图片
    该方式优点是可以显示JPG等其它格式的图片。一、实验步骤1、使用MFC应用程序向导添加基于对话框的项目;2、在资源视图中拖控件设计UI界面,包含PictureControl和Button共2个控件;3、修改PictureControl控件的Type为Bitmap;4、双击Button按钮编写如下代码voidCpicTestDlg::......