二模 (12) day1
第一题:
题目大意:
求由N个1,M个0组成的排列的个数,要求在排列的任意一个前缀中,1的个数不少于0的个数。N,M<=5000。
解题过程:
1.看到N,M的范围就明确肯定不会是dp,因为起码要用二维表示状态,就算转移是O(1),也要5000*5000的时间,况且还要高精度,绝对超时。
2.于是想到可以根据Catalan数的推导方法来推出公式。
ps:Catalan数的推导方法和一些应用可以参考我之前的博文中的问题二http://www.cnblogs.com/vb4896/p/3874622.html
下面把这题的公式简单地推一遍:
首先可以考虑所有的排列数减去不符合要求的排列数就是答案:ans=C(n+m,m) - 不符合要求的排列数。
对于任意一个不符合要求的数,必定在从某一奇数位(设为pp)上第一次出现0比1多的情况。
那么假设把第[pp+1,n+m]位上的所有0变成1,所有1变成0,那么就变成了一个有m-1个1,n+1个0的排列,也就是说任意一个不符合要求的排列都可以转换成有m-1个1,n+1个0的排列。 同理任意一个有m-1个1,n+1个0的排列也可以转换成一个不符合要求的排列。 所以不符合要求的排列数也就是有m-1个1,n+1个0的排列数。
所以ans=C(n+m,m) - C(n+m,m-1) = { (m+n)! * (n-m+1) }/ {m! * (n+1)! }.
3.推出公式之后我就傻逼的去打 高精度乘高精度+高精度乘单精度了。结果发现后面的除法 是 高精度除 高精度。。还从来木有写过。 所以又想到可以把10000(n+m<=10000)以内的所有质数(p[i]表示第i个质数)搞出来,然后对于分子分母分解质因数,分别存到2个数组里(A[i] 存分子中有多少个质因子p[i],B[i]存 分子中有多少个质因子p[i]).
然后A[i]-B[i] 就是结果中 质因子p[i]的个数,做高精度乘单精度就可以了。 貌似也不需要压位,试验了下5000,5000的数据也能半秒之内出来。 8位一压就是0.01s秒杀了。。 折腾了将近一个半小时。
第二题:
题目大意:
给出一个正整数n(N≤100000),求一个最小的正整数m,使得n×m的十进制表现形式中只含1和0。
解题过程:
1.没什么思路,睡了个午觉后直接打了个暴力,dfs出18位以内的01序列(m*n),找到一个最小的能被n整除的就可以了。本来以为骗了50分不错了。结果数据比较良心,竟然给全过了。。但是不知道如何科学地判断无解的情况。
2.比较严谨的算法:也是搜索n*m,从1开始拓展,在数字后面要么加0,要么加1。只要保存当前数 mod n 的值mo即可, 如果在当前数的后面加一个0,那么新的数mod n 的值 就变成 mo*10 mod n 。加1也是同样的道理。 还需要做一个hash,因为如果当前数mod n = c , 之前已经搜索到一个数 mod n 也是 c , 显然前面那个数更优(按长度拓展,前面那个数长度短),那么就不要继续搜索下去了。 所以 搜索的状态最多只有n个,如果搜不到mod n=0的数就是无解。
3.搜索的时候保存的是该节点的父亲,以及从它的父亲拓展到它是加1还是加0,那么最后就可以递归来把这个数还原回去了。数据比较弱,不用写高精度,long long 就给过了。
第三题:
题目大意:
在N*N的棋盘上放N个车,规定有M个位置不能放,求使得车不能相互攻击的方案数。 N≤20,M≤10
解题过程:
1.这题感觉就是为了练习容斥原理设计的,之前在NOI导刊上看了篇容斥原理的文章,凭着仅有的一点点印象还是瞎搞出来了。
2.看到M的范围比较小,所以应该从M入手. 设M个不能放的位置分别为P1,P2,P3...PM. 反过来考虑,先求出所有的方案N!,然后减去不符合要求的。
3.设P1 必须放,那么就有(N-1)!种方案,设P2 必须放,那么有(N-1)!种方案,设PM 必须放,那么也有(N-1)!种方案。
把这些方案都减去,那么就重复减了P1 P2 都放了 , P1 P3 都放了...的情况,然后把这些情况加回去,又多加了P1 P2 P3 都放的情况.. 所有容斥原理的模型就出来了。。
ans=N! - P中有1个必须放的方案数 + P中有2个必须放的方案数 - P中有3个必须放的方案数 .....
+-交替即可。。 对于P中有k个必须放的方案数,只要dfs出P中选出不冲突的K个位置的方案数* (N-k)! 即可。
二模 (12) day1的更多相关文章
- 二模 (16) day1&day2
第一题:题目大意: 数列a[0]=a[1]=1, a[n]=a[n-2]*a[n-1]*n,求a[n]的因子个数 mod 1000000007. n<=1000000 解题过程: 1.递推式还 ...
- 二模13day1解题报告
二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...
- 二模 (8) day2
第一题: 题目描述: 有 n 个炸弹,有些炸弹牵了一根单向引线(也就是说引线只有在这一端能被炸弹点燃),只要引爆了这个炸弹,用引线连接的下一个炸弹也会爆炸.每个炸弹还有个得分,当这个炸弹被引爆后就能得 ...
- JK触发器与模12计数器
JK触发器 JK触发器具有保持,置0,置1和翻转四个功能. 则可得出次态方程:\(Q_{n+1} = JQ_n'+K'Q_n\) Design `timescale 1ns / 1ps module ...
- 二模 (12)day2
第一题: 题目大意: 有N颗糖,两个人轮流取,每次只能取质数颗,不能取的输.求先取者若必胜,最少需要多少步胜利.(N<=10000) 解题过程: 1.看到N的范围比较小,先打个素数表,然后dp即 ...
- 二模 (8) day1
第一题: 题目大意: 梦幻城市每年为全市高中生兴办一次运动会.为促使各校同学之间的交流,采用特别的分队方式:每一个学校的同学,必须被均匀分散到各队,使得每一队中该校的人数皆相同.为增加比赛的竞争性,希 ...
- 二模 (3) day1
第一题: 题目描述: 一个数列定义如下:f(1) = 1,f(2) = 1,f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.给定 A,B 和 n 的值,要求计算 ...
- 二模 (15)day1
第一题: 题目大意: 有两个长度为N的序列A和B,在A和B中各任取一个数相加可以得到N2个和,求这N2个和中最小的N个. 解题过程: 1.这题是刘汝佳<<训练指南>>上的一道经 ...
- 二模 (13)day1
第一题: 题目大意: N个发射站排成一排,求每个发射站左右第一个比它高的发射站. N<=1000000 解题过程: 1.前几天做poj的时候刚好在discuss里看到有一个神奇的东东叫单调栈,正 ...
随机推荐
- js的小随笔
1.在js中{ }中的块级语句没有独立的作用域 var i = 5;for(; i < 8; i++){ console.log(i); } //输出 5 6 7 //全局设置的变量i在for ...
- 在PC端或移动端应用中接入商业QQ的方法
今天看博友的博客学习了一种很有用的方法: 在页面中需要接入企业的QQ,访问网址:http://shang.qq.com/widget/consult.php.(就是API接口),然后你只需要登录你的Q ...
- mysql 求时间段平均值
考虑下面的需求,在一段时间内,间隔一段时间,取一个平均值,把所有的平均值取出来,怎么办?思路:在存储过程中,拼接sql语句.根据起始时间和结束时间,while循环每次加一段时间.DROP PROCED ...
- python一个注意的地方
https://www.zhihu.com/question/25874136 class test: l=[] def init(self): self.l=['1','2','7'] a1=tes ...
- Android最佳性能实践(二)——分析内存的使用情况
由于Android是为移动设备开发的操作系统,我们在开发应用程序的时候应当始终把内存问题充分考虑在内.虽然Android系统拥有垃圾自动回收机制,但这并不意味着我们就可以完全忽略何时去分配或释放内存. ...
- LCA模板
/*********--LCA模板--***************/ //设置好静态参数并构建好图的邻接表,然后调用lca_setquery()设置查询 //最后调用lca_start(),在lca ...
- C++ Primer 第二章 引用 指针 const限定符
1.引用: 为对象起了另外一个名字,引用类型引用另外一种类型,通过将声明符写成&d的形式来定义引用类型,其中d也就是声明的变量名(声明符就是变量名). PS:1.通过图片中编译所提示的报错信息 ...
- phalcon: model 验证数据完整性
The above example performs a validation using the built-in validator “InclusionIn”. It checks the va ...
- 基于OGG的Oracle与Hadoop集群准实时同步介绍
版权声明:本文由王亮原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/220 来源:腾云阁 https://www.qclou ...
- mydbtest文档
mydbtest是楼方鑫编写的一个数据库测试工具,有需要的话,请自取 http://pan.baidu.com/s/1mgJpukg#path=%252FOneSQL%252FDocument 找到& ...