第一题:
题目大意:

数列a[0]=a[1]=1, a[n]=a[n-2]*a[n-1]*n,求a[n]的因子个数 mod 1000000007.  n<=1000000

解题过程:

1.递推式还真没想出来,就记录每个a[i]的分解质因数的结果,然后转移质因子的个数。可以拿到30分。

2.思路:计算a[i]的时候,a[i]=a[i-2]*a[i-1]*i.  追踪这个i,它到a[i+1]里的时候是一个i,到a[i+2]里的时候是2个i,到a[i+3]里的时候是3个i,到a[i+4]里的时候是5个i,所以可以发现i到a[n]里的时候就有F[n-i+1]个i.(F[i]表示斐波那契数列第i项).

3.根据这个思路就可以来做了,首先很容易想到可以把1~n都分解质因数就可以得出a[n]中各个质因子的个数了,但是对于100w的数据显然是跑不出来的。时间复杂度是O(n*sqrt(n))

4.既然1~n都要分解质因数,那么不妨直接仿照筛法来做。举个例子:对于质数3,可以筛到3,6,9,12... 3,6,12里都有1个质因子3,那么a[n]中的质因子3的个数就可以加上F[n-3+1],F[n-6+1],F[N-12+1].. 而对于9,他有2个质因子3,那么a[n]中的质因子3的个数就可以加上F[n-9+1]*2.  也就是k中有多少个质因子x,就让a[n]质因子x的个数加上多少个F[n-k+1].时间复杂度成功降为O(n*log2n). 但是还是跑不出100w的数据。

5.更进一步优化可以到O(n).  对于数k,假设它有一个质因子p,显然a[n]中的p的个数要加上F[n-k+1].那么加起来之后就先不要管它。但是k/p的每个质因数在a[n]中也要出现F[n-k+1],被我们忽略掉了(实际上是把它放到分解k/p的时候来算),所以当分解真正的k/p的时候,它的每个质因子在a[n]中本来是要出现F[n-k/p+1]次的,但是之前还有一个被我们丢掉的k/p,要出现F[n-k+1]次,所以当我们分解真正的k/p的时候,把它在a[n]中出现的次数当做F[n-k/p+1]+F[n-k+1]次就可以了。

因此在分解k的时候,只要计算最小的质因子p(其实可以任意一个质因数),然后F[n-k/p+1]=F[n-k/p+1]+F[n-k+1]. 非常巧妙.   至于为什么要最小的质因子p,是因为可以用O(n)的筛法处理出每个数最小的质因数。


第二题:

题目大意:

解同余方程组

x mod m1=a1

x mod m2=a2

...

x mod mn=an

解题过程:

1.这题数据真良心,直接暴力枚举+卡时骗到了60分。

2.AC算法和扩展欧几里得有关,我直接补充到之前的关于扩展欧几里得的文章里了。

http://www.cnblogs.com/vb4896/p/4009181.html


第三题:

题目大意:

在三维空间里从(0,0,0)出发,要求走n步回到原地.第k步可以让x,y,z坐标的任意一个+-k,然后还有一些障碍点不能通过,也不能走走过的点,求所有方案。 n<=12.

解题过程:

1.看到n的范围这么小八成就是搜索了,先打了个最裸的搜索,发现竟然很快可以跑出10以内的数据,对于11和12就不大行了。

2.由于第k步只能让一个坐标+k,很多情况下都是永远走不到原点的. 假设是在第k步,当前的坐标是(x,y,z).之后肯定要让xyz都变成0, 那么不考虑障碍什么的,在最理想的状况下,x,y,z在后面的第k+1,k+2...n步中,要么+t,要么-t,要么不变.所以可以倒着dfs预处理出一个数组d[i][j],表示在第i,i+1,i+2..n步里能否达到j.   就可以拿来剪枝了:

d[k+1][-x]==false || d[k+1][-y]==false || d[k+1][-z]==false 的时候直接return.

这样对于n=12且没有任何障碍点的数据都能很快出解。

二模 (16) day1&day2的更多相关文章

  1. 又是一个二模02,不过day2

    话说比较简单.除了第三题不会写平衡树啊你妹!!边做边写吧. 机智的链接~机智的链接~机智的链接~机智的链接~机智的链接~机智的链接~机智的链接~机智的链接~机智的链接~机智的链接~机智的链接~机智的链 ...

  2. 二模 (8) day2

    第一题: 题目描述: 有 n 个炸弹,有些炸弹牵了一根单向引线(也就是说引线只有在这一端能被炸弹点燃),只要引爆了这个炸弹,用引线连接的下一个炸弹也会爆炸.每个炸弹还有个得分,当这个炸弹被引爆后就能得 ...

  3. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  4. 二模 (9) day2

    第一题: 题目大意:求满足条件P的N位二进制数的个数.P:该二进制数有至少3个0或者3个1挨在一起.. N<=20000 解题过程: 1.一开始直接写了个dfs把表打了出来,不过没发现什么规律, ...

  5. 二模 (15)day2

    第一题:Alice和Bob两个人正在玩一个游戏,游戏有很多种任务,难度为p的任务(p是正整数),有1/2p 的概率完成并得到2p−1分,如果完成不了,得0分.一开始每人都是0分,从Alice开始轮流做 ...

  6. 二模 (12)day2

    第一题: 题目大意: 有N颗糖,两个人轮流取,每次只能取质数颗,不能取的输.求先取者若必胜,最少需要多少步胜利.(N<=10000) 解题过程: 1.看到N的范围比较小,先打个素数表,然后dp即 ...

  7. 二模 (12) day1

    第一题: 题目大意: 求由N个1,M个0组成的排列的个数,要求在排列的任意一个前缀中,1的个数不少于0的个数.N,M<=5000. 解题过程: 1.看到N,M的范围就明确肯定不会是dp,因为起码 ...

  8. 二模 (6) day1

    第一题: 设 S(N)表示 N 的各位数字之和,如 S(484)=4+8+4=16,S(22)=2+2=4.如果一个正整数 x满足 S(x*x)=S(x)*S(x),我们称 x 为 Rabbit Nu ...

  9. 二模 (4) day1

    第一题: 题目描述: 有一个无穷序列如下:110100100010000100000…请你找出这个无穷序列中指定位置上的数字 解题过程: 1.考虑到1的数目比0少的多,就从1的位置的规律开始分析.前几 ...

随机推荐

  1. Thinking in UML-1-为什么需要UML

    1 从面向过程到面向对象 面向过程认为我们的世界是由一个个相互关联的小系统组成.逻辑严密.环环相扣.井然有序.但是我们这个世界从来不是一成不变的.世界的复杂性和频繁变革不是面向过程可以轻易应付应付的. ...

  2. C++ 学习笔记(2) —— float 和 double 的精度

    Size Range Precision 4 bytes ±1.18 x 10-38 to ±3.4 x 1038 6-9 significant digits, typically 7 8 byte ...

  3. Asp.net 2.0 无刷新图片上传 显示缩略图 具体实现

    简单三步实现图片无刷新上传:注意是上传,至于上传时的验证,比如图片的尺寸,大小,格式判断.限制等,自行解决. 兼容性想还不错:FF,CH,IE,猎豹,都是可以实现的.如果看到回显.当然就是成功了. 经 ...

  4. VIM技巧之去除代码行号并缩进代码

    从网上找源代码时经常会发现代码虽然排版很好,但是前面带着行号,直接复制粘贴得将前面的行号去掉才能编译,而更糟糕的是前面带行号,而代码又没排版,简直是噩梦.在VIM中可以轻易地解决这个问题. 这里将网上 ...

  5. oracle 查看某session的历史执行sql情况

    1. 查看性能最差的前100sql SELECT * FROM ( SELECT PARSING_USER_ID EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sq ...

  6. Java虚拟机学习(5):类加载器(ClassLoader

    类加载器 类加载器(ClassLoader)用来加载 class字节码到 Java 虚拟机中.一般来说,Java 虚拟机使用 Java 类的方式如下:Java 源文件在经过 Javac之后就被转换成 ...

  7. Tomcat常见的内存溢出,以及解决方法

    一.常见的三种内存溢出错误: 1.java.lang.OutOfMemoryError:java heap space    ====JVM Heap(堆)溢出 JVM再启动的时候回自动设置JVM H ...

  8. App.xaml.cs

    using System.Windows; namespace HelloWorld { /// <summary> /// Interaction logic for App.xaml ...

  9. python(三)set集合

    set集合的特点是无序.不重复序列 创建集合: 1 2 3 4 5 6 7 8 9 10 11 12 13 a.s1 = {11,22} b.s2 = set() c.s3 = set([11,22, ...

  10. js替换字符串问题

    利用正则表达式配合replace替换指定字符. 语法 stringObject.replace(regexp,replacement) 参数 描述 regexp 必需.规定了要替换的模式的 RegEx ...