zoukankan      html  css  js  c++  java
  • 纪中集训2020.02.05【NOIP提高组】模拟B 组总结反思——【佛山市选2010】组合数计算,生成字符串 PPMM

    JZOJ2290. 【佛山市选2010】组合数计算

    比赛时

    一看到数学题就有一种厌倦感。不论如何,还是仔细思考吧,按照公式的直接求法显然时间会爆(听同学说有一种快速求阶乘的方法,但是对于这题肯定要高精度,太麻烦了)。间接入手,杨辉三角???时间复杂度和空间复杂度均为(O(n^2)),显然不行。有没有快速求组合数的方法呢,显然我除了杨辉三角一个都没有学。于是我开始找杨辉三角的其他规律——一无所获,大数学家都不能找到,蒟蒻的我肯定找不到。突然蹦出一个奇妙的想法,杨辉三角+暴力,因为题目保证答案在64位无符号整数取值范围内,于是便输出了一下杨辉三角,发现当n很大以后((geq 1000)左右),答案很大,几乎当(m>20)时,全都爆表了,于是我预处理(n leq 2000)的组合数,其他暴力算,加了一点点小优化,比如说n=5,m=2。c(5,2)=(54)/(21),那么我们再算54的过程中,如果除21中的某个数没有余数就除,再标记一下除过了。另外,记得输出用%llu。骗了50分!!!

    之后

    有一个变态的数据——(n=0,m=0)特殊判断一下。我比赛时脑子卡壳,居然忘记加上(if(n-m<m),m=n-m)。一顿改良之后,骗了AC100!!!。正解——lucas,自闭改题中。

    JZOJ2291. 【佛山市选2010】生成字符串

    比赛时

    我猜想是贪心或者DP,一下子想不出来,果断弃疗。我最不擅长这种区间DP。

    之后

    首先,简化题目,把相邻的相同的多个字符合成一个。设(s)表示合并之后的字符数组,(f_{j,i})表示从第(j)个字符开始长度为(i)的字符串生成最小步数,。转移

    1. (f_{j,i}=f_{j,i-1}(s_j==s_{j+i-1})),因为这段字符串的第一个等于最后一个,所以他们有可能是在一起的,只用生成一次,中间再插入其他东西。

    2. (f_{j,i}=min(f_{j,i},f_{j,k-j+1}+f_{k+1,(j-i+1)-(k+1)+1})(无条件)),这个很容易理解吧,劈成两半。

    总结

    遇到一些题目时,可以尝试简化题目。另外,我得加强一下我的区间DP了。

    JZOJ2292. PPMM

    比赛时

    题目写着(-231<x<231),于是打了个权值线段树,因为有了取反的操作,所以如果不真的进行取反,答案就是要么取最大(取反次数为偶数时),要么取最小 (取反次数为奇数时),加入的时候如果取反次数为奇数,对加入的数取反即可,线段树维护最大和最小。想着能AC,结果10分。

    之后

    题目出错了!!!(-2^{31}<x<2^{31}),实际是这样的,坑人呀!!!我想了一个方法——两个堆,一个大根,一个小根,跟之前的线段树思想差不多,但是删除上会遇到麻烦,因为要知道它在堆中的位置。正解——单调队列,插入排序的思想,感觉这个时间复杂度太玄学了!!!自己的想法(虽然不想打)——离散化+权值线段树。

  • 相关阅读:
    使用BigDecimal进行精确运算
    Hibernate读书笔记数据过滤
    Hibernate读书笔记Hibernate的关联映射之1N关联映射
    bernate读书笔记条件查询
    Hibernate读书笔记Hibernate的关联映射之NN关联映射
    Hibernate读书笔记缓存
    Hibernate读书笔记事件机制
    解决拦截器的对于参数传递无效问题
    Hibernate读书笔记SQL查询
    Hibernate读书笔记Hibernate的关联映射之组件属性关联关系
  • 原文地址:https://www.cnblogs.com/cjz-IT/p/contest20200225.html
Copyright © 2011-2022 走看看