![](https://img-blog.csdnimg.cn/20201030200557875.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
牛客NOIP模拟赛
2020年CSP前备战
ZCETHAN
少年的悲哀,毕竟是易消的残雪
展开
-
2020牛客NOIP赛前集训提高组#6-B-艰难睡眠(RMQ,单调队列)
题目描述样例input:3 6 31 13 24 30 1 2 7 1 21 2 0 3 4 57 9 5 0 4 6output:4PS: 本题需快读,若采用出题人给的快读,需要从文件读入,测试的时候要freopen,但是提交的时候不用。分析由于对于每个吵闹的人,可以算出从iii开始睡觉的情况下,这个吵闹的人需要被调到那个区间开始吵。设其他量与题目描述一致,lenlenlen表示吵闹的人可以开始吵闹的区间SSS的大小,则易得:len=m−k−bi+1len=m-k-b_i+1原创 2020-10-30 19:58:23 · 159 阅读 · 0 评论 -
2020牛客NOIP赛前集训提高组#5-C-经典字符串问题(主席树,权值线段树)
题目描述样例input:5 11 5 3 4 21 3 2output:3分析静态区间第k大,用主席树。在一般的线段树中,查找整段的第k大的数,可以用权值线段树。然后在主席树中,要求一段区间l,rl,rl,r的第k大,只要用前缀和的思想,对于每一层,只要将kkk与lvr+1−lvllv_{r+1}-lv_llvr+1−lvl比较,并相减就可以了,其他操作一样。然后解决最后一个问题:字典序。可以先用string读入,然后sort先排好,在用一个数组将其大小离散化成数字就可以了。原创 2020-10-28 21:16:15 · 112 阅读 · 0 评论 -
2020牛客NOIP赛前集训提高组#5-B-K匹配(KMP,容斥)
题目描述样例input:10 2abaaaababaaboutput:33分析TTT的长度是kkk,而题目也是要求kkk匹配的,所以实际上,就是求SSS中有多少个子串包含TTT。第一步考虑有多少子串与TTT是相等的,这个很简单,用hashhashhash或者kmpkmpkmp都能,保险起见,用kmpkmpkmp。然后考虑对于每个匹配,有多少子串是包含当前这个匹配位置的。以样例为例(匹配加粗):ab aaa ab ab a那么比如我当前是SSS中选取子串ab(第一个ab),那么显原创 2020-10-28 20:29:28 · 169 阅读 · 1 评论 -
2020牛客NOIP赛前集训提高组#3-B-牛半仙的妹子图(最小生成树)
题目描述样例input:6 6 3 3 110000071 1 1 2 2 31 6 11 2 52 3 43 6 33 4 65 6 20 25 69 11output:587分析可以先跑最小生成树,求出这个图中从xxx到达任意一个节点所需要的最大困难程度的最小值。此时有一个很好的思路:用一个t[i]t[i]t[i]表示种类iii妹子被半仙访问所需要的最少困难程度。最后算的时候枚举妹子的种类,然后判断一下t[i]t[i]t[i]与l,rl,rl,r的大小关系就原创 2020-10-24 12:30:17 · 173 阅读 · 0 评论 -
2020牛客NOIP赛前集训提高组#2-B-包含(状压DP)
题目描述样例input:2 23 749output:yesno分析看到位运算,想到状压。对于一个集合中的数,1的数量比它少(指2进制)的数肯定是包含在内的。所以只要将每个元素进行扩展,然后询问的时候只要查一下桶就可以O(n)O(n)O(n)解决了。扩展的时候用记忆化解决就可以了。具体看注释吧。代码#include<bits/stdc++.h>#define ll long longusing namespace std;const int MAXN=1e原创 2020-10-21 18:51:53 · 92 阅读 · 0 评论 -
2020牛客NOIP赛前集训提高组#2-A-GCD(数论,素数筛)
题目描述样例input:5 7output:13分析分析式子f(x)=gcd(所有因子)f(x)=gcd(所有因子)f(x)=gcd(所有因子)如果xxx不是由一个数的次幂得到的,那么xxx肯定有2个以上的质因子,所以这些因子的gcdgcdgcd就是1。而对于x=pix=p^ix=pi,则gcdgcdgcd为ppp。由此,可以得到一个大胆的想法,先将ans定为b−a+1b-a+1b−a+1。枚举数的次幂,如果是在a,ba,ba,b之间的,那么就把答案更新,即原来是1,那么要把1改成p,原创 2020-10-21 18:33:25 · 89 阅读 · 0 评论