倍增
cggwz
这个作者很懒,什么都没留下…
展开
-
开车旅行(NOIP2012提高组)
题目链接这道题最基本的思路是用倍增,但是其实它的难点在预处理部分。倍增的部分此次就不细说了,和之前的最近公共祖先的思想类似。我们主要来探讨一下预处理的部分。我们需要预处理出每个城市小A和小B的选择目标和对应的距离,接下来就可以处理出进行2k轮开车的目的地和距离了。所以前者才是重中之重,而前者如果要用暴力的方法会tle的。有人可能会疑惑,我们找当前点的后面两三个不就可以了?为什么会tle呢?实际上并不是序号相差很远距离就很远,实际上有可能第一个城市和最后一个城市最近,可以举个例子,城市海拔如下:原创 2020-06-20 17:56:03 · 459 阅读 · 0 评论 -
货车运输(NOIP2013)
题目链接:货车运输 这道题其实思路很显然,就是最大生成树加倍增。 我们来顺着代码讲一遍。 我们先读入n和m 然后把所有边的权值设置为0 读入时,重复的边只取最大(很显然) 然后kruscal进行最大生成树,用G和H两个vector分别去保存边和权值 然后倍增即可。 具体看代码:#include<cstdio>#include<cstring>#i...原创 2018-07-16 20:34:20 · 371 阅读 · 0 评论 -
转圈游戏(NOIP2013)
传送门 这个这个…… 写个取余的快速幂就好了。 代码如下:#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,m,k,x;long long pow_mod(long long x, long long n, long long mod...原创 2018-08-17 21:30:50 · 480 阅读 · 0 评论 -
火车运输(NOIP2013)
传送药水 (喝了这一壶传送药水,保你看了什么题都觉得神清气爽) 这题不算水。 首先想到,肯定需要跑一遍最大生成树,因为我们需要尽可能大的限制。 那么,接下来就是求两点之间最小限制。 那么就是我们就可以用求LCA(最近公共祖先)来解决这个问题。 所以就倍增好了。 我们这里倍增的有两个数组,一个是祖先,另一个是当前点到祖先的路上的最小限制。 最后理一遍思路: 先kruskal建立一个...原创 2018-08-17 22:17:59 · 346 阅读 · 0 评论 -
麦森数(NOIP2003普及)
传送门这里只做笔记,详细解答明年再补。数学推导:位数=log10(2)*p+1手写高精度快速幂代码如下:#include<cstdio>#include<cstring>#include<algorithm>#include<cmath> using namespace std;int p;int num[505];int r...原创 2018-10-18 19:52:57 · 1253 阅读 · 3 评论 -
苦恼的小明
cgg传送门这题的解法是费马小定理+欧拉函数+快速幂整理:费马小定理:a^(φ(m))≡1(mod m) ((a,m)=1) (phi为欧拉函数)所以得:(a^b)mod m=(a^(b%phi(m)))mod m欧拉函数线筛打表就好了代码如下:#include<cstdio>#include<cstring>#include<algo...原创 2018-10-23 22:29:50 · 201 阅读 · 0 评论 -
最近公共祖先详解
其实是假的。这个,老早就学过了,但是显然由于当时理解得不透彻,很快就遗忘了。今天,做了一份模拟试题,第一题就是LCA,汗!没办法,只好温习,终于理解透彻了。最近公共祖先,顾名思义,就是指求树上两个点的第一个公共祖先,或者说是深度最大的公共祖先。求这个有什么用呢?一个常见的用途就是求两点简单路径。有人可能说,这不简单吗?我们把两个点调整到同一个高度,然后一个一个往上找,不就好了?简单的...原创 2018-11-06 21:40:41 · 261 阅读 · 0 评论