随笔分类 -  Noip

摘要:二分答案,大于二分值的边直接不走,看最后是否存在一条路径即可 c++ include include include include include using namespace std; define debug(x) cerr 1; if(SPFA(g[mid])) { ans = g[mid 阅读全文
posted @ 2018-11-06 21:23 Zolrk 阅读(124) 评论(0) 推荐(0)
摘要:设dp[i][j]表示到第i个点一共经过j个点时的最小路径长度,按拓扑序转移就好了 考虑到到达第i个点并且目前走过的点数量固定时,显然不需要知道以前走的是哪些点,只要保证此时路径长度最短,就会得到更优的答案 注意到k不会超过int,所以数组不需要开longlong(开了会爆内存。。。)判断的时候强转 阅读全文
posted @ 2018-11-04 17:05 Zolrk 阅读(201) 评论(0) 推荐(0)
摘要:虽然这题显然可以DP。。。但是不能直接当背包来处理,因为没有所谓的上界 但是只拿部分分也是可以背包来做的 好吧先说正解,首先应该分析题有什么性质再DP,如果说确实找不到性质那就DP吧... 但是这题...闪烁,跑步互相独立,假设最优解有闪烁,休息,跑步这几种操作,那么可以先把闪烁和休息提前进行,跑步 阅读全文
posted @ 2018-11-03 11:08 Zolrk 阅读(110) 评论(0) 推荐(0)
摘要:设f[i]表示还剩i个没买,那么可以有式子f[i] = (n i) / n f[i] + i/n f[i 1] + 1 抽到已经抽到过的,或者是没抽到过的 这个状态其实也可以某方面地说成,抽i个的期望花费,但是我这里抽i个不是随便抽i个,而是说如果存在一种方案,这个方案抽取顺序是1 ~ n,那么从第 阅读全文
posted @ 2018-11-02 21:33 Zolrk 阅读(97) 评论(0) 推荐(0)
摘要:因为是两串排列,所以两串值相同位置不同 那么公共子序列要求的就是值相同,而“子序列”要求的是值的位置上升 那么把ab串联系起来,b和a相同的值,位置不同。 设$fb_i$ 为值为bi的数在a串中的位置,显然已经满足相同 那么只要取出一个最长子序列即可,若f值上升,则位置递增,则说明这些bi在a中可以 阅读全文
posted @ 2018-11-02 19:59 Zolrk 阅读(219) 评论(0) 推荐(0)
摘要:用树状数组求逆序对的时候注意:要统计b[i] 1的前缀和,因为可能有相同值的元素 不去重离散化: c++ sort(a+1, a+n+1, cmp); for(int i=1; i include include include using namespace std; const int MAXN 阅读全文
posted @ 2018-11-02 18:24 Zolrk 阅读(200) 评论(0) 推荐(0)
摘要:这道题是一类树的瓶颈问题。 题意是求两点路径上的最大的最小边(在图中,两点之间路径不只一条),那么肯定这条 最小边存在于最大生成树上 。(反证法证明) 同理, 若求最小的最大边,这条最小边一定在最小生成树上 因此我们可以将图的问题转化为树上问题。树上两点之间的路径一定经过lca,因此这条路我们可以由 阅读全文
posted @ 2018-11-02 16:36 Zolrk 阅读(128) 评论(0) 推荐(0)
摘要:对顶堆,维护第k大 考虑维护一个大根堆,一个小根堆。 这两个堆总大小为当前区间长度,我们维护两个性质: 1.小根堆总比大根堆多一个元素 2.小根堆所有元素都大于大根堆元素 这样小根堆的堆顶就是区间中位数。 当需要加入一个新元素时,如果这个元素比小根堆堆顶要大,就加入小根堆中,反之则加入大根堆,这样可 阅读全文
posted @ 2018-11-02 14:38 Zolrk 阅读(144) 评论(0) 推荐(0)
摘要:问题是求一个数往右边看,在遇到大于等于他本身的之前,有多少个比他小的数 正难则反,转化问题为一个数能被多少个数看到,算贡献,那么这些的和就是答案 用单调栈去处理,把栈里的比当前处理的数要小于等于的全弹掉,剩下的那些就是严格比这个数大的,也就是可以看到这个数的 ans要开long long c++ i 阅读全文
posted @ 2018-11-02 14:23 Zolrk 阅读(97) 评论(0) 推荐(0)
摘要:虽然说通过组合数递推公式可以看出来$C(i,j)=C(i 1,j 1)+C(i 1,j)$ 就是杨辉三角公式,但是还是有一个很关键的差别...就是当j=1时这个公式不太管用...比如说$C_3^1$ 表示从三个东西里面选一个,有三种选法,这个就需要提前处理了... 矩阵前缀和搞一下就好了 求组合数的 阅读全文
posted @ 2018-11-02 14:22 Zolrk 阅读(93) 评论(0) 推荐(0)
摘要:f(s)表示消灭s集合的小猪所需要的最小数量,考虑到n很小,最大才18,,用二进制来表示状态,0为第i个只小猪没有被消灭,1为第i只小猪被消灭了,就像010001010101这样的,最后求的就是111111111111111这样状态的值 P[i]表示所有可能的抛物线 需要注意的是,每条抛物线能够干掉 阅读全文
posted @ 2018-11-02 14:14 Zolrk 阅读(101) 评论(0) 推荐(0)
摘要:直接做多重背包复杂度太高了,我们想想是什么因素限制了如此高的复杂度 如果没有硬币个数的限制呢?直接用完全背包预处理后查询就好了 那么现在考虑一个较为简单的问题,只有一种硬币有限制 设dp[s]为买了价值为s时的方案数,先 暂时当做 完全背包预处理出dp数组 若那个 唯一 被限制硬币的面值为c,个数为 阅读全文
posted @ 2018-11-02 07:29 Zolrk 阅读(124) 评论(2) 推荐(0)
摘要:我被博弈的P position和N position的定义限制了思想 实际上我可以先寻找必胜态,然后用定义来证明这个必胜态 这是一个环,题目说至少存在一条边数值为0,先考虑简单问题,整个环只有一个0,那么从起点开始,先手不断取0,“迫使”后手不断往0靠近,可以证明的是先手决定方向,后手不能违背这个方 阅读全文
posted @ 2018-11-01 19:14 Zolrk 阅读(142) 评论(0) 推荐(0)
摘要:交到洛谷上只有80分。。。 注意初始值 l = 1, r = 0 然后就是修改的部分(revise) 我套用了之前的习惯,直接传值进去,直接f[col]+=k 然后判断是否为1或者0,但是我没有想到1可以是0+1得来也可以是2 1得来 所以想安全一点就写if和else吧。。。有时候真的难以想到这种可 阅读全文
posted @ 2018-10-31 19:11 Zolrk 阅读(99) 评论(0) 推荐(0)
摘要:这道题有着一个 转化思想 $k \bmod i \Leftrightarrow k i \lfloor\frac{k}{i}\rfloor$ 所以有$ans = \sum_i^n (k i \lfloor\frac{k}{i}\rfloor) =n k \sum_i^n(i \lfloor\frac 阅读全文
posted @ 2018-10-30 21:22 Zolrk 阅读(111) 评论(0) 推荐(0)
摘要:[P1016 旅行家的预算][1] 贪心 貌似贪心基本上都得加个排序 既然要求花费最少的话,显然在收费低的那个加油站多加点油是最好的 那么你考虑这么几种情况 1.一种最理想的情况,你在每个加油站加油,都能去到另一个更低价格的加油站,那么你每次找能到达且最小价格的加油站跑过去,然后加一定升数的油,这个 阅读全文
posted @ 2018-10-30 20:24 Zolrk 阅读(148) 评论(0) 推荐(0)
摘要:这种题应该格外注意“1”的问题(边界处理) 题意:给定N,求$1 \leq x,y \leq N$且gcd(x, y)为素数的(x,y)数对的个数 令p代表一个素数 $$gcd(x, y) = p \Rightarrow gcd(\frac{x}{p}, \frac{y}{p}) = 1$$ 于是有 阅读全文
posted @ 2018-10-30 20:07 Zolrk 阅读(113) 评论(0) 推荐(0)
摘要:如果你以(1,1)为坐标原点,那么是没有什么规律的 但如果你以(0,0)为坐标原点,仔细观察一下能发现每个能看到的点的坐标(x, y)互质 然后(x, y)既然可以那么(y, x)也行 矩阵坐标从0到N 1 注意phi[1] = 1 答案是$1 + 2 \sum_{i=1}^{N 1} \phi(i 阅读全文
posted @ 2018-10-30 18:19 Zolrk 阅读(107) 评论(0) 推荐(0)
摘要:这只是暴力算法 给定四个参数a0,a1,b0,b1,求满足$gcd(x, a0) = a1且lcm(x,b0)=b1$的x的个数 由lcm这个条件可确定x的上界,找b1的约数,每个都判断一下是否符合上述两个条件 我我我又爆int了 c++ include include include includ 阅读全文
posted @ 2018-10-29 21:49 Zolrk 阅读(156) 评论(0) 推荐(0)
摘要:这是一道非常典型的筛法,利用区间长度比较小,以及质数比较少,用少量的质数,只筛区间内部的合数,复杂度就不会很高 建议多开long long,很多时候你难以注意到哪里会爆int 还有就是可以自己估摸着数量级提前把素数表打完,别每次都重打一遍素数表 阅读全文
posted @ 2018-10-29 20:52 Zolrk 阅读(103) 评论(0) 推荐(0)